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