java → kotlin 変換 そのあとに。

46
Java → Kotlin 変変 変変変変変2016/12/13 変 4 変 Kotlin 変変変Sansan Sansan 変変変変 変変変

Upload: kenichi-tatsuhama

Post on 16-Apr-2017

1.835 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Java → Kotlin 変換 そのあとに。

Java → Kotlin 変換 そのあとに。

2016/12/13  第 4 回 Kotlin 勉強会@ SansanSansan 株式会社 辰濱健一

Page 2: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

自己紹介

2

Page 3: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

>自己紹介

3

• 辰濱健一

• 徳島生まれ、奈良育ち、徳島県在住

• 2 回転職するも、いずれも徳島県内勤務

• Tokushima.app 主催(徳島でのスマホアプリの勉強会)

• Sansan 株式会社所属

• 古民家を改修した神山ラボ勤務

• 名刺アプリ Eight Android 版の開発

• Kotlin, RxJava, Realm, … を使ってます

• リモートワーク

• 趣味は楽器演奏

Page 4: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

>Sansan 神山ラボ

4

Page 5: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

>趣味

5

• 楽器演奏(エレクトーン・トランペット)

• 徳島県内のイベントで、ちらほら演奏する機会を頂いてます

Page 6: Java → Kotlin 変換 そのあとに。

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 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 7

本題へ…

Page 8: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 8

Java → Kotlinそのあとに。

Page 9: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

Android Studio の Code メニュー

9

Page 10: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 10

Convert Java Fileto Kotlin File !

Page 11: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 11

既存コードを簡単に Kotlin 化!

Page 12: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 12

できるけど、Kotlin らしくない

変換結果も…

Page 13: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

13

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 14: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

14

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 15: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

メンバ変数の名前

15

• Java

• Kotlin

Page 16: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

メンバ変数の名前

16

• Java

• Kotlin

接頭辞の m は外しておこう!

Page 17: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

なぜ?

17

• 生成される getter / setter 関数名に残ってしまう

• 例)

これを Java から使うと…

Page 18: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

18

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一関数式に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 19: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

おさらい

19

• var• 再代入可能な変数

• val• 再代入不可な変数

• 原則として、 val を使用して再代入を極力避けるべき

Page 20: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

var → val に

20

• Java

• Kotlin

↑ こいつを val にする

Page 21: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

var → val に書き換えた

21

val は再代入不可…

Page 22: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

Val cannot be reassigned 対応

22

val は再代入不可なので、宣言時に代入

Page 23: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

23

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 24: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

遅延初期化に

24

• by lazy{…} を使うと、初期化を遅延できる

• 委譲プロパティ

Page 25: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

25

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 26: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

NotNull 型にできるならして、 !! 演算子の除去

26

• NotNull 型

• null 代入可能

• 型名そのまま

• Nullable 型

• null 代入不可

• 型名のあとに ? をつける

Page 27: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

NotNull 型にできるならして、 !! 演算子の除去

27

警告が増えた… orz

Page 28: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

NotNull 型にできるならして、 !! 演算子の除去

28

• !! 演算子

• Nullable な参照を、 NotNull に強制的に変換する

• ただし、 null に対して !! 演算子を適用すると、KotlinNullPointerException が throw される

• !! 演算子は原則使用しないことがお勧めされている

• どうしても必要なら、 requireNotNull を

Page 29: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

NotNull 型にできるならして、 !! 演算子の除去

29

!! を除去するだけで OK

Page 30: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

30

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出し

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 31: Java → Kotlin 変換 そのあとに。

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 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

スコープ関数に置き換える

32

Page 33: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

33

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出し

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 34: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

単一式関数

34

• 波括弧 { } で囲まれたブロックがない

• 関数シグネチャに続けて = 、その後に式がある

• return がない

単一式関数化

Page 35: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

単一式関数にする

35

単一式関数化

行数削減

Page 36: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

36

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 37: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

安全呼び出し

37

• Nullable 変数に null が入っていたら何もしない→ null チェックを簡素化できる

Page 38: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

38

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 39: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

if, else if,… は when に

39

Java to Kotlin

Page 40: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

変換後に手直ししたい箇所

40

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

• NotNull 型にできるならして、 !! 演算子の除去

• スコープ関数に置き換える

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

• 使われていない関数パラメータの NotNull / Nullable チェック

Page 41: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

使われていない関数パラメータの型チェック

41

Java to Kotlin

Page 42: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

使われていない関数パラメータの型チェック

42

Java to Kotlin

Page 43: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

使われていない関数パラメータの型チェック

43

Java to Kotlin

実はここは Nullable

Page 44: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

使われていない関数パラメータの型チェック

44

Java to Kotlin

実はここは Nullable

“Intent” → “Intent?” にする必要がある!

Page 45: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 45

Convert Java to Kotlin したら、

Kotlin らしくするのもお忘れなく!

Page 46: Java → Kotlin 変換 そのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved. 46

おわり。