Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Step up Kotlin
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Paraya
July 13, 2017
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Step up Kotlin
Paraya
July 13, 2017
More Decks by Paraya
See All by Paraya
J2K failure story : UNIT
paraya3636
0
130
J2Kコンバータをカスタマイズする ver: 5min
paraya3636
0
1.9k
J2Kコンバータをカスタマイズする
paraya3636
1
2.3k
命名おじさん
paraya3636
1
190
DDD失敗談
paraya3636
0
160
Other Decks in Programming
See All in Programming
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
150
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
新卒PdEのリアル
ryu1013
1
490
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
240
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
130
自分的「カンファレンスの楽しみ方」
syumai
0
200
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
160
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
3
1.2k
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Building an Out-of-Order CPU
latte72
1
750
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.4k
The Language of Interfaces
destraynor
162
27k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Building Applications with DynamoDB
mza
96
7.2k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Amusing Abliteration
ianozsvald
1
290
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Β͘͠ͳΔ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠