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
Kotlin化をやりきる / Done Kotlinize
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
verno3632
March 05, 2019
Programming
3.9k
0
Share
Kotlin化をやりきる / Done Kotlinize
https://techsalon.pixiv.co.jp/
でLTしました
verno3632
March 05, 2019
More Decks by verno3632
See All by verno3632
2022年のポリシー変更を振り返る
verno3632
0
190
今のうちからできる_Android_14準備
verno3632
1
1.3k
Credential Managerを使ってパスワードを入力する
verno3632
0
780
Other Decks in Programming
See All in Programming
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
210
Vibe NLP for Applied NLP
inesmontani
PRO
0
450
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
790
検索設計から 推論設計への重心移動と Recall-First Retrieval
po3rin
2
670
実用!Hono RPC2026
yodaka
2
240
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
0
150
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
500
実践CRDT
tamadeveloper
0
580
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
150
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
24
14k
Running Swift without an OS
kishikawakatsumi
0
850
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Faster Mobile Websites
deanohume
310
31k
Documentation Writing (for coders)
carmenintech
77
5.3k
A designer walks into a library…
pauljervisheath
211
24k
The Cult of Friendly URLs
andyhume
79
6.8k
Claude Code のすすめ
schroneko
67
220k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Producing Creativity
orderedlist
PRO
348
40k
Accessibility Awareness
sabderemane
1
100
Transcript
Kotlin化をやりきる pixiv Inc. verno3632 2018.6.5
2 自己紹介 • 2017/05 中途入社 • pixivコミック Android @verno3632
• 3 Kotlin化しました
Kotlin化をやりきる 4
クラッシュなく Kotlin化をやりきる 5
Kotlinのよいところ 6
Kotlinのよいところ null安全 7
var str0: String = "" var str1: String? = null
str0 = str1 // compile error 8
Kotlin化でクラッシュしたところ 9
Kotlin化でクラッシュしたところ null周り 10
Kotlin化でクラッシュしたところ null周り 11 5つとも
原因は同じっぽい 12
functionのNonNullな引数にnullが来る 13
class KotlinClass { // nullが渡ってきてクラッシュ fun setNonNullString(nonNullStr: String){ ... }
} 14
NonNullな所にNullableな値が来るなら コンパイルエラーおこるんじゃね 15
JavaとKotlinが共存してると起こる 16
// kotlin setNonNullString(getNull()) // java public String getNull() { return
null; } nullが来てもコンパイルが通ってしまう 17
• Javaで宣言された型はKotlinではPlatform Typeとして扱われる • NonNullな変数にPlatform Typeが来た時のNullチェックが緩和される 18 Platform Type //
Kotlin fun getNull(): String? = null // Java public String getNull() { return null; }
どうする? 19
• メソッドの返り値、引数、変数につけられる Javaのアノテーション • Platform typeではなくnullable/non-nullとしてKotlinで扱われる 20 @Nullable/@NonNullを使う // java
@Nullable public String getNull(){ return null; }
• Android SDK/3rd partyのライブラリの多くはJavaで書かれている ◦ @Nullable/@NonNullがついていないと同じことが起こる • 解決策は、最新版を使うこと ◦ Android
SDK API level 28 ▪ よく使われるAPIに@Nullable/@NonNullがついた ◦ 3rd partyライブラリも対応してくれるところが増えた 21 Android SDKでも同じクラッシュが起こる
SDK/ライブラリを最新にして @Nullable/@NonNullつければよさそう 22
Javaの全てのコードにつけるの? 23
• Infer Nullity • Kotlin化を少しずつ進めたいのにJavaのコードすべてに手をつける? • Kotlin化した部分と関係がありそうなJavaのコードにつける 24 @Nullable/@NonNullをつける
• JavaとKotlinの境界面をなるべく小さくしたまま Kotlinのコードを増やす ◦ 境界面が大きくなると@Nullable/@NonNullをつけるべきところが増える ◦ 漏れによるバグを仕込んでしまいやすくする • 細かくKotlin化するのではなく、ある程度大きな単位で行なった方がいい 25
JavaとKotlinの境界面
• 1画面に含まれるコンポーネントも合わせて Kotlin化 ◦ Activity/Fragment/ViewModel/カスタムView/Model • 画面間の依存は呼び出しくらいなので、境界面を小さくしたままできる 26 画面単位でKotlin化
• Android SDK/3rd partyライブラリを最新で開発する • 画面単位でKotlin化する • Java側の影響ありそうな部分に@Nullable/@NonNullをつける 27 まとめ
-クラッシュなくKotlin化する-