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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
120
J2Kコンバータをカスタマイズする ver: 5min
paraya3636
0
1.9k
J2Kコンバータをカスタマイズする
paraya3636
1
2.3k
命名おじさん
paraya3636
1
190
DDD失敗談
paraya3636
0
150
Other Decks in Programming
See All in Programming
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.6k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.4k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
810
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
310
JavaDoc 再入門
nagise
1
420
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
140
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
120
Agentic UI
manfredsteyer
PRO
0
200
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
180
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Language of Interfaces
destraynor
162
27k
From π to Pie charts
rasagy
0
220
Context Engineering - Making Every Token Count
addyosmani
9
990
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
870
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Git: the NoSQL Database
bkeepers
PRO
432
67k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
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Β͘͠ͳΔ
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠