Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ankoは甘くて美味しい〜Ankoに見るKotlinの表現力〜 #gunosybeer
Search
Taro Nagasawa
December 08, 2015
Programming
0
1.6k
Ankoは甘くて美味しい〜Ankoに見るKotlinの表現力〜 #gunosybeer
エムスリー x Gunosy Beer bash!で発表した資料です
Taro Nagasawa
December 08, 2015
Tweet
Share
More Decks by Taro Nagasawa
See All by Taro Nagasawa
Android開発者のための Kotlin Multiplatform入門
ntaro
0
980
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
2.3k
#Ubie 狂気の認知施策と選考設計
ntaro
13
13k
UbieにおけるサーバサイドKotlin活用事例
ntaro
1
1.2k
KotlinでSpring 完全理解ガイド #jsug
ntaro
6
3.5k
Kotlinでサーバサイドを始めよう!
ntaro
1
1k
Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
ntaro
5
2.9k
Kotlin Contracts #m3kt
ntaro
4
4.2k
How_to_Test_Server-side_Kotlin.pdf
ntaro
1
530
Other Decks in Programming
See All in Programming
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
120
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
150
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
38
25k
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
sbt 2
xuwei_k
0
270
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
120
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
How Software Deployment tools have changed in the past 20 years
geshan
0
29k
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
1k
dotfiles 式年遷宮 令和最新版
masawada
1
760
チームをチームにするEM
hitode909
0
310
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.7k
Rails Girls Zürich Keynote
gr2m
95
14k
Writing Fast Ruby
sferik
630
62k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Fireside Chat
paigeccino
41
3.7k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
A Tale of Four Properties
chriscoyier
162
23k
Being A Developer After 40
akosma
91
590k
Visualization
eitanlees
150
16k
4 Signs Your Business is Dying
shpigford
186
22k
Transcript
Ankoͯ͘ඒຯ͍͠ ʙAnkoʹݟΔKotlinͷදݱྗʙ ΤϜεϦʔY(VOPTZ#FFSCBTIʂ HVOPTZCFFS ᖒଠ!OHTX@UBSP
ࣗݾհ w ᖒଠ!OHTX@UBSP w "OESPJEΤϯδχΞ w ,PUMJOΤϰΝϯδΣϦετ ࣗশ w
ࡀɺֈ࠲ɺͱ͕େ͖
Kotlinͱ w +FU#SBJOT։ൃͷ+7.ݴޠ w "OESPJEαϙʔτ w ൃදɺ·ͩϕʔλ൛ w "OESPJE+BWB͔Β,PUMJOΓ͑ϫϯνϟϯ w
࠷ۙɺհهࣄ͕ཚཱͯ͠ΔͷͰͦͪΒࢀর
Ankoͱ w ,PUMJOͰهड़͞Εͨ"OESPJEϥΠϒϥϦ w +FU#SBJOT։ൃʢઆಘྗɾ҆৺ײ͕͋Δʣ w ओʹ6*ΛΈཱͯΔ%4-
UIΛΈཱͯΔDSL w جຊతʹ"OESPJEͰ9.-Ͱ6*Λදݱ͢Δ w ࠶ར༻ੑɺ҆શੑɺύϑΥʔϚϯεͷ໘Ͱෆར w ͱ͍͑ίʔυͰ໋ྩతʹ6*Λߏங͢Δͷμα Πʢ4XJOHΈ͍ͨͳΠϝʔδʣ w %4-Ͱએݴతʹ6*Λߏங͢Δ
ʢ+BWB'94DSJQUΈ͍ͨͳΠϝʔδʣ
ඪ४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)
AnkoͰDSL verticalLayout {! val name = editText()! button("Say Hello") {!
onClick {! toast("Hello, ${name.text}!”)! }! }! }
Ͳ͏ಈ͍͍ͯΔͷ͔ There is no .
ϥϜμࣜ Lambda Expression
ߴ֊ؔͱϥϜμࣜ // ҾʹAΛऔͬͯBΛฦؔ͢fΛҾʹऔΔؔ! fun <A, B> 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
֦ுؔ Extension Function
֦ுؔ fun String.hello() = “Hello, $this”! ! “world”.hello() //=> “Hello,
world”
֦ுؔ × ϥϜμࣜ fun <A, B> A.convert(f: (A)->B) = f(this)!
! 3.convert({ x: Int -> x * 2}) //=> 6! 3 convert { it * 2 } //=> 6
Anko class MainActivity : Activity() {! override fun onCreate(savedInstanceState: Bundle?)
{! super.onCreate(savedInstanceState)! ! verticalLayout {! val name = editText()! button("Say Hello") {! onClick { toast("Hello, ${name.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͕লུ͞ΕͯΔ
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
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͕ผͷͷΛࢦ͢ Կނ͔ʁ
֦ுؔΛҾʹऔΔߴ֊ؔ class Builder { fun foo() {} }! ! fun
build(f: Builder.() -> Unit) {! Builder().f()! }! ! build {! foo()! }
Կ͕خ͍͠ͷ͔ verticalLayout {! button(“foo”)! verticalLayout {! button(“bar”)! verticalLayout {! button(“baz”)!
}! }! }
Կ͕خ͍͠ͷ͔ verticalLayout {! button(“foo”)! verticalLayout {! button(“bar”)! verticalLayout {! button(“baz”)!
}! }! } ֊ߏΛදݱͰ͖Δ ϝιουͷείʔϓ ΛߜΕΔ ܕ҆શ OVMM҆શ
XMLͰฤू͢Δͱ ը໘ϓϨϏϡʔ ݟΕΔ͡ΌΜʁ
None
ͦΕɺAnkoͰ Ͱ͖·͢ʂ
None
Θͳ͍खͳ͍
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠