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
Step up Kotlin
Search
Paraya
July 13, 2017
Programming
0
81
Step up Kotlin
Paraya
July 13, 2017
Tweet
Share
More Decks by Paraya
See All by Paraya
J2K failure story : UNIT
paraya3636
0
88
J2Kコンバータをカスタマイズする ver: 5min
paraya3636
0
1.8k
J2Kコンバータをカスタマイズする
paraya3636
1
2.1k
命名おじさん
paraya3636
1
150
DDD失敗談
paraya3636
0
120
Other Decks in Programming
See All in Programming
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
Result型で“失敗”を型にするPHPコードの書き方
kajitack
5
660
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1k
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
320
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
14
5k
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
120
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
760
Hack Claude Code with Claude Code
choplin
4
2.1k
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
450
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
7.4k
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
130
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
Balancing Empowerment & Direction
lara
1
430
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Embracing the Ebb and Flow
colly
86
4.7k
Docker and Python
trallard
44
3.5k
GitHub's CSS Performance
jonrohan
1031
460k
Transcript
Step up Kotlin! by miura(Paraya)
ࣗݾհ ϓϥοτϑΥʔϜ - Android Java 2 - iOS 3 -
Android Kotlin 1 ※New! ͦͷଞ - DDD 2
એ
Step up Kotlin!
KotlinΛ࢝ΊΔ্Ͱ৭ʑΈ ͕͋Δͱࢥ͍·͢ɻ
ݟ׳Εͳ͍ίʔυ… letͬͯԿ… ʁͬͯԿ… ͦͦͲ͏ͬͯಈ͍ͯΔ ͷ͔͔Βͳͯ͘ෆ҆
ͰKotlinΛ࢝ΊΔ্ͰɺͲ͏ ׳Ε͍ͯ͘ͷ͕͍͍ͩΖ͏͔
Javaख़࿅ऀ͕KotlinʹͲ͏׳Εͯ ͍͔͘ͷεςοϓΞοϓΛհ͠ ·͢
࣍ - Kotlinͷհ - ॳ৺ऀ͚~JavaͬΆ͘KotlinΛॻ͘~ - ࣍ͷεςοϓ~Androidʹ༗༻ͳॴΛKotlin Β͘͠ॻ͘~
Kotlinͱ KotlinҎԼͷϓϥοτϑΥʔϜ্Ͱಈ͖·͢ɻ - Kotlin for JVM - Kotlin for javascript
- Kotlin for Native(ϕʔλ൛ɻMacɺWindowsͰ ಈ͘Β͍͠)
Kotlinͱ ࠓͷͱ͜ΖJVMͷAndroidɺSpringͰͷ࠾༻ࣄ ྫΛଟ͘ฉ͖·͢ɻ ຊൃදͰJVMͷதͰAndroid͚ͷΛϝ ΠϯͰɻ
Kotlinͷྑ͍ͱ͜Ζ Null҆શͱ͔finalͱ͔ϓϩύςΟͱ͔ry ͱΓ͋͑ͣKotlinͰॻ͍͓͚ͯɺJavaͰॻ͘ ΑΓஈ্ͷ࣭ʹͳΔ͘Β͍ͷϙςϯγϟ ϧ͋Δɻ
KotlinͬͯͲ͏ಈ͍ͯΔͷʁ KotlinͰॻ͘ͱϏϧυ࣌ʹJavaͷίʔυʹม ͞Ε͍ͯ·͢ɻ
KotlinͬͯͲ͏ಈ͍ͯΔͷʁ // StringͷnameΛએݴ var name : String? name?.toInt() // Javaมޙͷίʔυ
if (name != null) { name.toInt(); } OVMMνΣοΫ͕ࣗಈੜ͞ΕΔ
࠷ऴతʹJavaͱͯ͠ಈ͘ KotlinͰॻ͍ͯ݁ہJavaͱͯ͠ಈ͘ɻ KotlinJavaͷ໘ͳ෦Λٵऩͯ͠ΑΓϕ λʔͳJavaίʔυΛੜ͢Δɻ
ॳ৺ऀ͚ ~KotlinΛJavaΆ͘ॻ͘~
KotlinΛJavaΆ͘ॻ͘ class KotlinUser(val userId: String) ϓϥΠϚϦίϯετϥΫλ ΫϥεఆٛͱҰॹʹҾPSมఆ ٛͰ͖Δ
ϓϥΠϚϦίϯετϥΫλͱ ͔Α͘Θ͔Μͳ͍ͳ
ϓϥΠϚϦίϯετϥΫλΛ Θͳ͍ class KotlinUser { val userId: String constructor(userId: String)
{ this.userId = userId } } αϒίϯετϥΫλͰॳظԽ Ϗϧυ௨Γ·͢ ˞XBSOJOHग़·͢
KotlinΛJavaΆ͘ॻ͘ fun function(text: String?) { text?.let { it.toInt() } }
/VMMBCMFUZQF /VMMBCMFUZQFΛࢀর͢Δࡍ MFU Ͱ/PO/VMMUZQFͱͯ͠ࢀর͢Δ ඞཁ͕͋Δ
?.letͱ͔Α͘Θ͔Μͳ͍ͳ
?.letΛΘͳ͍ fun function(text: String?) { if (text != null) {
text.toInt() } } /VMMBCMFUZQFΛࢀর͢Δࡍ OVMMͰͳ͍จ຺Ͱ͋Ε0,
·ͱΊ - JavaͬΆ͘ॻ͍ͯେৎ - KotlinΒ͠͞Λແཧʹٻ͠ͳͯ͘ NullSafetyͳͲͷKotlinͷओͳԸܙेड͚ ΒΕ·͢ - ؾܰʹKotlinΛॻ͍ͯΈΔ͜ͱ͕େࣄʂ
࣍ͷεςοϓ ~Androidʹ༗༻ͳॴΛ KotlinΒ͘͠ॻ͘~
lazy private View view; View getView() { if (this.view ==
null) { return View.inflate(context, R.layout.view_top, null); } else { return this.view } }
lazy private View view; View getView() { if (this.view ==
null) { return LayoutInflater.from(context).inflate(R.layout.view_top, null); } else { return this.view } } private val view by lazy { LayoutInflater.from(context).inflate(R.layout.view_top, null); } MB[ZΛ༻͍Δ͜ͱͰɺϓϩύςΟࢀর࣌ʹॳظԽ͞Ε͍ͯ ͳ͍߹͚ͩॲཧΛߦ͏ͱ͍͏͜ͱ͕Ͱ͖Δ
apply Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setType(“image/*”); // ͜͜ͰԿ͔͠Βͷॲཧ context.startActivity(intent);
͜͜ͷจ຺ͰJOUFOUॳظԽࡁΈͷ ͷ͕΄͍͠ɻ ͨͩϝιουԽ͢Δʹίετ͕ߴ͍ʜ
apply val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI).apply { type = "image/*"
} // ͜͜ͰԿ͔͠Βͷॲཧ context.startActivity(intent) BQQMZΛར༻͢Δ͜ͱͰจ຺্ॳظԽࡁ ΈJOUFOUΛར༻Ͱ͖Δ
lateinit class View : RelativeLayout { private var name: String?
= null // nullͰॳظԽ͠ͳ͍ͱΤϥʔ fun initView(name: String) { this.name = name } } ຊOBNFΛ/POOVMMͱͯ͠ѻ͍͍͕ͨɺ7JFXͷॳ ظԽίϯετϥΫλͰͳ͘PO$SFBUF ͳͲ "OESPJEͷϥΠϑαΠΫϧʹͳΔͷͰΤϥʔʹͳͬͯ ͠·͏
lateinit class View : RelativeLayout { private lateinit var name:
String fun initView(name: String) { this.name = name } } MBUFJOJUΛ͚Δ͜ͱͰɺॳظԽ͕ίϯετϥΫλ֎ ͰߦΘΕΔ͜ͱΛ໌ࣔͰ͖Δɻ ͨͩ͠ɺॳظԽ͠Εͨ߹ 6OJOJUJBMJ[FE1SPQFSUZ"DDFTT&YDFQUJPO͕ൃੜ
·ͱΊ - KotlinJavaʹม͞Εͯಈ͘ɻͭ·ΓJavaɻ - Kotlinͷຊ࣭NullSafetyͳͲʹ͋Γɺίʔυ ͷॻ͖ํඍʑͨΔͷͰ͢ɻ׳Εͳ͍ง ғؾͰॻ͍ͯOK - lazyɺapplyɺlateinitΛ͍͜ͳ͢͜ͱͰΑΓ KotlinΒ͘͠ͳΔ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠