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
verno3632
March 05, 2019
Programming
0
3.8k
Kotlin化をやりきる / Done Kotlinize
https://techsalon.pixiv.co.jp/
でLTしました
verno3632
March 05, 2019
Tweet
Share
More Decks by verno3632
See All by verno3632
2022年のポリシー変更を振り返る
verno3632
0
180
今のうちからできる_Android_14準備
verno3632
1
1.3k
Credential Managerを使ってパスワードを入力する
verno3632
0
750
Other Decks in Programming
See All in Programming
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
220
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
700
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
820
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
120
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
130
Goで作る、開発・CI環境
sin392
0
230
Result型で“失敗”を型にするPHPコードの書き方
kajitack
5
650
PipeCDのプラグイン化で目指すところ
warashi
1
270
初学者でも今すぐできる、Claude Codeの生産性を10倍上げるTips
s4yuba
16
11k
Rails Frontend Evolution: It Was a Setup All Along
skryukov
0
140
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
1
9.9k
生成AI時代のコンポーネントライブラリの作り方
touyou
1
210
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Raft: Consensus for Rubyists
vanstee
140
7k
For a Future-Friendly Web
brad_frost
179
9.8k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Fireside Chat
paigeccino
37
3.5k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Become a Pro
speakerdeck
PRO
29
5.4k
Making Projects Easy
brettharned
116
6.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Unsuck your backbone
ammeep
671
58k
The Cult of Friendly URLs
andyhume
79
6.5k
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化する-