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.7k
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
170
今のうちからできる_Android_14準備
verno3632
1
1.2k
Credential Managerを使ってパスワードを入力する
verno3632
0
700
Other Decks in Programming
See All in Programming
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
140
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
580
Zoneless Testing
rainerhahnekamp
0
140
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
1.2k
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
400
MCP with Cloudflare Workers
yusukebe
2
240
ドメインイベント増えすぎ問題
h0r15h0
2
520
歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス
i10416
0
190
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
660
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
460
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
300
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
180
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Designing for humans not robots
tammielis
250
25k
Building an army of robots
kneath
302
44k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
GraphQLとの向き合い方2022年版
quramy
44
13k
Become a Pro
speakerdeck
PRO
26
5.1k
A Philosophy of Restraint
colly
203
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
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化する-