Java → Kotlin 変換 そのあとに。

Post on 16-Apr-2017

1.821 views 1 download

Transcript of Java → Kotlin 変換 そのあとに。

Java → Kotlin 変換 そのあとに。

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

Copyright © 2014 Sansan, Inc. All rights reserved.

自己紹介

2

Copyright © 2014 Sansan, Inc. All rights reserved.

>自己紹介

3

• 辰濱健一

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

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

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

• Sansan 株式会社所属

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

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

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

• リモートワーク

• 趣味は楽器演奏

Copyright © 2014 Sansan, Inc. All rights reserved.

>Sansan 神山ラボ

4

Copyright © 2014 Sansan, Inc. All rights reserved.

>趣味

5

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

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

Copyright © 2014 Sansan, Inc. All rights reserved.

>Tokushima.app

6

• http://tokushima-app.connpass.com• 徳島のスマホアプリ開発の勉強会

• 基本もくもく会、たまにハンズオン

• 場所は徳島市内、 10:00 〜 16:00• 初心者でも OK 、入退出自由、参加費無料

• 月 1 ペースで開催(したいと思ってはいる)

• 辰濱が東京の勉強会で仕入れてきた情報なども共有します

• 要望あれば、近隣に出張ハンズオンなども始めようかな…とか思っている。

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

本題へ…

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

Java → Kotlinそのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

Android Studio の Code メニュー

9

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

Convert Java Fileto Kotlin File !

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

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

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

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

変換結果も…

Copyright © 2014 Sansan, Inc. All rights reserved.

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

13

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

14

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

メンバ変数の名前

15

• Java

• Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

メンバ変数の名前

16

• Java

• Kotlin

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

Copyright © 2014 Sansan, Inc. All rights reserved.

なぜ?

17

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

• 例)

これを Java から使うと…

Copyright © 2014 Sansan, Inc. All rights reserved.

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

18

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一関数式に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

おさらい

19

• var• 再代入可能な変数

• val• 再代入不可な変数

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

Copyright © 2014 Sansan, Inc. All rights reserved.

var → val に

20

• Java

• Kotlin

↑ こいつを val にする

Copyright © 2014 Sansan, Inc. All rights reserved.

var → val に書き換えた

21

val は再代入不可…

Copyright © 2014 Sansan, Inc. All rights reserved.

Val cannot be reassigned 対応

22

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

23

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

遅延初期化に

24

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

• 委譲プロパティ

Copyright © 2014 Sansan, Inc. All rights reserved.

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

25

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

26

• NotNull 型

• null 代入可能

• 型名そのまま

• Nullable 型

• null 代入不可

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

27

警告が増えた… orz

Copyright © 2014 Sansan, Inc. All rights reserved.

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

28

• !! 演算子

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

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

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

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

29

!! を除去するだけで OK

Copyright © 2014 Sansan, Inc. All rights reserved.

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

30

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出し

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

スコープ関数

31

• let, with, run, apply• 「 Kotlin スコープ関数 用途まとめ」

http://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691eがわかりやすくて、オススメ!

• newIntent 関数 に apply を使うのがオススメ

Copyright © 2014 Sansan, Inc. All rights reserved.

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

32

Copyright © 2014 Sansan, Inc. All rights reserved.

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

33

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出し

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

単一式関数

34

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

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

• return がない

単一式関数化

Copyright © 2014 Sansan, Inc. All rights reserved.

単一式関数にする

35

単一式関数化

行数削減

Copyright © 2014 Sansan, Inc. All rights reserved.

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

36

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

安全呼び出し

37

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

38

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

if, else if,… は when に

39

Java to Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

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

40

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

41

Java to Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

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

42

Java to Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

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

43

Java to Kotlin

実はここは Nullable

Copyright © 2014 Sansan, Inc. All rights reserved.

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

44

Java to Kotlin

実はここは Nullable

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

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

Convert Java to Kotlin したら、

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

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

おわり。