Java → Kotlin 変換 そのあとに。
- 1. Java → Kotlin 変換 そのあとに。
2016/12/13 第4回Kotlin勉強会@Sansan
Sansan株式会社 辰濱健一
- 3. Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
2
• 辰濱健一
• 徳島生まれ、奈良育ち、徳島県在住
• 2回転職するも、いずれも徳島県内勤務
• Tokushima.app 主催
(徳島でのスマホアプリの勉強会)
• Sansan株式会社所属
• 古民家を改修した神山ラボ勤務
• 名刺アプリ Eight Android 版の開発
• Kotlin, RxJava, Realm, … を使ってます
• リモートワーク
• 趣味は楽器演奏
- 5. Copyright © 2014 Sansan, Inc. All rights reserved.
> 趣味
4
• 楽器演奏(エレクトーン・トランペット)
• 徳島県内のイベントで、ちらほら演奏する機会を頂い
てます
- 6. Copyright © 2014 Sansan, Inc. All rights reserved.
> Tokushima.app
5
• http://tokushima-app.connpass.com
• 徳島のスマホアプリ開発の勉強会
• 基本もくもく会、たまにハンズオン
• 場所は徳島市内、10:00〜16:00
• 初心者でも OK、入退出自由、参加費無料
• 月1ペースで開催(したいと思ってはいる)
• 辰濱が東京の勉強会で仕入れてきた情報なども共有します
• 要望あれば、近隣に出張ハンズオンなども始めようかな…とか思っている。
- 9. Copyright © 2014 Sansan, Inc. All rights reserved.
Android Studio の Code メニュー
8
- 10. Copyright © 2014 Sansan, Inc. All rights reserved. 9
Convert Java File
to Kotlin File!
- 12. Copyright © 2014 Sansan, Inc. All rights reserved. 11
できるけど、
Kotlin らしくない
変換結果も…
- 13. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
12
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 14. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
13
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 15. Copyright © 2014 Sansan, Inc. All rights reserved.
メンバ変数の名前
14
• Java
• Kotlin
- 16. Copyright © 2014 Sansan, Inc. All rights reserved.
メンバ変数の名前
15
• Java
• Kotlin
接頭辞の m は外しておこう!
- 17. Copyright © 2014 Sansan, Inc. All rights reserved.
なぜ?
16
• 生成される getter / setter 関数名に残ってしまう
• 例)
これを Java から使うと…
- 18. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
17
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一関数式に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 19. Copyright © 2014 Sansan, Inc. All rights reserved.
おさらい
18
• var
• 再代入可能な変数
• val
• 再代入不可な変数
• 原則として、val を使用して再代入を極力避けるべき
- 20. Copyright © 2014 Sansan, Inc. All rights reserved.
var → val に
19
• Java
• Kotlin
↑こいつを val にする
- 21. Copyright © 2014 Sansan, Inc. All rights reserved.
var → val に書き換えた
20
val は再代入不可…
- 22. Copyright © 2014 Sansan, Inc. All rights reserved.
Val cannot be reassigned 対応
21
val は再代入不可なので、宣言時に代入
- 23. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
22
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 24. Copyright © 2014 Sansan, Inc. All rights reserved.
遅延初期化に
23
• by lazy{…} を使うと、初期化を遅延できる
• 委譲プロパティ
- 25. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
24
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 26. Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
25
• NotNull 型
• null 代入可能
• 型名そのまま
• Nullable 型
• null 代入不可
• 型名のあとに?をつける
- 27. Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
26
警告が増えた…orz
- 28. Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
27
• !! 演算子
• Nullable な参照を、NotNull に強制的に変換する
• ただし、null に対して !! 演算子を適用すると、
KotlinNullPointerException が throw される
• !! 演算子は原則使用しないことがお勧めされている
• どうしても必要なら、requireNotNull を
- 29. Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
28
!! を除去するだけでOK
- 30. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
29
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出し
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 31. Copyright © 2014 Sansan, Inc. All rights reserved.
スコープ関数
30
• let, with, run, apply
• 「Kotlin スコープ関数 用途まとめ」
http://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691e
がわかりやすくて、オススメ!
• newIntent 関数 に apply を使うのがオススメ
- 33. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
32
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出し
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 34. Copyright © 2014 Sansan, Inc. All rights reserved.
単一式関数
33
• 波括弧 { } で囲まれたブロックがない
• 関数シグネチャに続けて =、その後に式がある
• return がない
単一式関数化
- 36. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
35
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 37. Copyright © 2014 Sansan, Inc. All rights reserved.
安全呼び出し
36
• Nullable 変数に null が入っていたら何もしない
→ null チェックを簡素化できる
- 38. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
37
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 39. Copyright © 2014 Sansan, Inc. All rights reserved.
if, else if,… は when に
38
Java to Kotlin
- 40. Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
39
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
- 41. Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
40
Java to Kotlin
- 42. Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
41
Java to Kotlin
- 43. Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
42
Java to Kotlin
実はここは Nullable
- 44. Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
43
Java to Kotlin
実はここは Nullable
“Intent” → “Intent?” にする必要がある!
- 45. Copyright © 2014 Sansan, Inc. All rights reserved. 44
Convert Java to Kotlin
したら、
Kotlin らしくするのも
お忘れなく!