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
190
今のうちからできる_Android_14準備
verno3632
1
1.3k
Credential Managerを使ってパスワードを入力する
verno3632
0
780
Other Decks in Programming
See All in Programming
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Patterns of Patterns
denyspoltorak
0
410
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.2k
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
CSC307 Lecture 02
javiergs
PRO
1
740
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
310
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
640
CSC307 Lecture 03
javiergs
PRO
1
460
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
440
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.2k
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
1
330
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
420
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Ruling the World: When Life Gets Gamed
codingconduct
0
120
エンジニアに許された特別な時間の終わり
watany
106
220k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
200
Raft: Consensus for Rubyists
vanstee
141
7.3k
Automating Front-end Workflow
addyosmani
1371
200k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
76
Highjacked: Video Game Concept Design
rkendrick25
PRO
0
260
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化する-