Ankoは甘くて美味しい〜Ankoに見るKotlinの表現力〜 #gunosybeer
by
Taro Nagasawa
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Ankoͯ͘ඒຯ͍͠ ʙAnkoʹݟΔKotlinͷදݱྗʙ ΤϜεϦʔY(VOPTZ#FFSCBTIʂ HVOPTZCFFS ᖒଠ!OHTX@UBSP
Slide 2
Slide 2 text
ࣗݾհ w ᖒଠ!OHTX@UBSP w "OESPJEΤϯδχΞ w ,PUMJOΤϰΝϯδΣϦετ ࣗশ w ࡀɺֈ࠲ɺͱ͕େ͖
Slide 3
Slide 3 text
Kotlinͱ w +FU#SBJOT։ൃͷ+7.ݴޠ w "OESPJEαϙʔτ w ൃදɺ·ͩϕʔλ൛ w "OESPJE+BWB͔Β,PUMJOΓ͑ϫϯνϟϯ w ࠷ۙɺհهࣄ͕ཚཱͯ͠ΔͷͰͦͪΒࢀর
Slide 4
Slide 4 text
Ankoͱ w ,PUMJOͰهड़͞Εͨ"OESPJEϥΠϒϥϦ w +FU#SBJOT։ൃʢઆಘྗɾ҆৺ײ͕͋Δʣ w ओʹ6*ΛΈཱͯΔ%4-
Slide 5
Slide 5 text
UIΛΈཱͯΔDSL w جຊతʹ"OESPJEͰ9.-Ͱ6*Λදݱ͢Δ w ࠶ར༻ੑɺ҆શੑɺύϑΥʔϚϯεͷ໘Ͱෆར w ͱ͍͑ίʔυͰ໋ྩతʹ6*Λߏங͢Δͷμα Πʢ4XJOHΈ͍ͨͳΠϝʔδʣ w %4-Ͱએݴతʹ6*Λߏங͢Δ ʢ+BWB'94DSJQUΈ͍ͨͳΠϝʔδʣ
Slide 6
Slide 6 text
ඪ४APIͰΰϦΰϦΔ val act = this! val layout = LinearLayout(act)! layout.orientation = LinearLayout.VERTICAL! val name = EditText(act)! val button = Button(act)! button.text = "Say Hello"! button.setOnClickListener {! Toast.makeText(act,! "Hello, ${name.text}!”,! Toast.LENGTH_SHORT).show()! }! layout.addView(name)! layout.addView(button)
Slide 7
Slide 7 text
AnkoͰDSL verticalLayout {! val name = editText()! button("Say Hello") {! onClick {! toast("Hello, ${name.text}!”)! }! }! }
Slide 8
Slide 8 text
Ͳ͏ಈ͍͍ͯΔͷ͔ There is no .
Slide 9
Slide 9 text
ϥϜμࣜ Lambda Expression
Slide 10
Slide 10 text
ߴ֊ؔͱϥϜμࣜ // ҾʹAΛऔͬͯBΛฦؔ͢fΛҾʹऔΔؔ! fun convert(target: A,! f: (A)->B) = f(target)! ! convert(1, { x: Int -> x * 2 }) //=> 2! convert(2, { x -> x * 2}) //=> 4! convert(3, { it * 2 }) //=> 6! convert(4) { it * 2 } //=> 8
Slide 11
Slide 11 text
֦ுؔ Extension Function
Slide 12
Slide 12 text
֦ுؔ fun String.hello() = “Hello, $this”! ! “world”.hello() //=> “Hello, world”
Slide 13
Slide 13 text
֦ுؔ × ϥϜμࣜ fun A.convert(f: (A)->B) = f(this)! ! 3.convert({ x: Int -> x * 2}) //=> 6! 3 convert { it * 2 } //=> 6
Slide 14
Slide 14 text
Anko class MainActivity : Activity() {! override fun onCreate(savedInstanceState: Bundle?) {! super.onCreate(savedInstanceState)! ! verticalLayout {! val name = editText()! button("Say Hello") {! onClick { toast("Hello, ${name.text}!") }! }! }! }! }
Slide 15
Slide 15 text
Anko class MainActivity : Activity() {! override fun onCreate(savedInstanceState: Bundle?) {! super.onCreate(savedInstanceState)! ! verticalLayout {! val name = editText()! button("Say Hello") {! onClick { toast("Hello, ${name.text}!") }! }! }! }! } "DUJWJUZͷ֦ுؔ UIJT͕লུ͞ΕͯΔ
Slide 16
Slide 16 text
Anko class MainActivity : Activity() {! override fun onCreate(savedInstanceState: Bundle?) {! super.onCreate(savedInstanceState)! ! verticalLayout {! val name = editText()! button("Say Hello") {! onClick { toast("Hello, ${name.text}!") }! }! }! }! } ͜ͷUIJT WFSUJDBM-BZPVU
Slide 17
Slide 17 text
Anko class MainActivity : Activity() {! override fun onCreate(savedInstanceState: Bundle?) {! super.onCreate(savedInstanceState)! ! this.verticalLayout {! val name = this.editText()! this.button(“Say Hello") {! onClick { toast("Hello, ${name.text}!") }! }! }! }! } UIJT͕ผͷͷΛࢦ͢ Կނ͔ʁ
Slide 18
Slide 18 text
֦ுؔΛҾʹऔΔߴ֊ؔ class Builder { fun foo() {} }! ! fun build(f: Builder.() -> Unit) {! Builder().f()! }! ! build {! foo()! }
Slide 19
Slide 19 text
Կ͕خ͍͠ͷ͔ verticalLayout {! button(“foo”)! verticalLayout {! button(“bar”)! verticalLayout {! button(“baz”)! }! }! }
Slide 20
Slide 20 text
Կ͕خ͍͠ͷ͔ verticalLayout {! button(“foo”)! verticalLayout {! button(“bar”)! verticalLayout {! button(“baz”)! }! }! } ֊ߏΛදݱͰ͖Δ ϝιουͷείʔϓ ΛߜΕΔ ܕ҆શ OVMM҆શ
Slide 21
Slide 21 text
XMLͰฤू͢Δͱ ը໘ϓϨϏϡʔ ݟΕΔ͡ΌΜʁ
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
ͦΕɺAnkoͰ Ͱ͖·͢ʂ
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
Θͳ͍खͳ͍
Slide 26
Slide 26 text
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠