Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
780
Kotlin 最新動向2022 #tfcon #techfeed
ntaro
1
2.3k
#Ubie 狂気の認知施策と選考設計
ntaro
13
13k
UbieにおけるサーバサイドKotlin活用事例
ntaro
1
1.1k
KotlinでSpring 完全理解ガイド #jsug
ntaro
6
3.5k
Kotlinでサーバサイドを始めよう!
ntaro
1
1k
Androidからサーバーサイドまで!プログラミング言語 Kotlinの魅力 #devboost
ntaro
5
2.8k
Kotlin Contracts #m3kt
ntaro
4
4.2k
How_to_Test_Server-side_Kotlin.pdf
ntaro
1
520
Other Decks in Programming
See All in Programming
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
230
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
10
6.6k
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
250
理論と実務のギャップを超える
eycjur
0
130
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
980
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
0
220
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
私はどうやって技術力を上げたのか
yusukebe
43
18k
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
810
オープンソースソフトウェアへの解像度🔬
utam0k
12
2.5k
Six and a half ridiculous things to do with Quarkus
hollycummins
0
160
dynamic!
moro
10
7.3k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
GitHub's CSS Performance
jonrohan
1032
470k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
900
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Visualization
eitanlees
149
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
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
Θͳ͍खͳ͍
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠