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.5k
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
150
今のうちからできる_Android_14準備
verno3632
0
760
Credential Managerを使ってパスワードを入力する
verno3632
0
540
Other Decks in Programming
See All in Programming
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
300
AppRouter Panel Talk
yosuke_furukawa
PRO
1
450
Elm 0.19.0 Changes
bkuhlmann
0
500
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
100
Let's learn code review
riofujimon
2
570
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
160
Elm Form Validation
bkuhlmann
0
510
Introducing Kotlin Multiplatform in an existing mobile app - Workshop Edition | AndroidMakers Paris
prof18
0
150
AmperとFleetを使ったAndroidアプリ
yoppie
0
250
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
2
200
CDKコントリビュートの最初の壁を越えよう! -簡単issueの見つけ方-
badmintoncryer
3
200
PHPはいつから死んでいるかの調査
chiroruxx
2
410
Featured
See All Featured
Docker and Python
trallard
35
2.7k
Six Lessons from altMBA
skipperchong
22
3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
8
1.3k
Web Components: a chance to create the future
zenorocha
306
41k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
222
21k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
65
14k
Code Review Best Practice
trishagee
56
15k
GraphQLとの向き合い方2022年版
quramy
33
12k
Designing on Purpose - Digital PM Summit 2013
jponch
111
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化する-