java → kotlin 変換 そのあとに。

51
Java → Kotlin 変変 変変変変変2016/11/26 Kansai.kt LT #kansaikt 変変変変変変変 変変変変変変 Sansan 変変変変 変変変

Upload: kenichi-tatsuhama

Post on 16-Apr-2017

1.064 views

Category:

Software


0 download

TRANSCRIPT

Java → Kotlin 変換 そのあとに。

2016/11/26   Kansai.kt LT #kansaikt@株式会社はてな 京都オフィスSansan 株式会社 辰濱健一

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.

>Sansan 京都ラボ

8

• 京都で Kotlin 書きたい方、お待ちしております!!

• 京都ラボ:

• http://jp.corp-sansan.com/blog/jinji/2014/141125.html

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

本題へ…

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

Java → Kotlinそのあとに。

Copyright © 2014 Sansan, Inc. All rights reserved.

Android Studio の Code メニュー

11

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

Convert Java Fileto Kotlin File !

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

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

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

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

変換結果も…

Copyright © 2014 Sansan, Inc. All rights reserved.

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

15

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

16

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

メンバ変数の名前

17

• Java

• Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

メンバ変数の名前

18

• Java

• Kotlin

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

Copyright © 2014 Sansan, Inc. All rights reserved.

なぜ?

19

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

• 例)

これを Java から使うと…

Copyright © 2014 Sansan, Inc. All rights reserved.

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

20

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一関数式に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

おさらい

21

• var• 再代入可能な変数

• val• 再代入不可な変数

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

Copyright © 2014 Sansan, Inc. All rights reserved.

var → val に

22

• Java

• Kotlin

↑ こいつを val にする

Copyright © 2014 Sansan, Inc. All rights reserved.

var → val に書き換えた

23

val は再代入不可…

Copyright © 2014 Sansan, Inc. All rights reserved.

Val cannot be reassigned 対応

24

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

25

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

遅延初期化に

26

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

• 委譲プロパティ

Copyright © 2014 Sansan, Inc. All rights reserved.

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

27

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

28

• NotNull 型

• null 代入可能

• 型名そのまま

• Nullable 型

• null 代入不可

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

29

警告が増えた… orz

Copyright © 2014 Sansan, Inc. All rights reserved.

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

30

• !! 演算子

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

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

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

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

31

!! を除去するだけで OK

Copyright © 2014 Sansan, Inc. All rights reserved.

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

32

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出し

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

スコープ関数

33

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

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

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

34

Copyright © 2014 Sansan, Inc. All rights reserved.

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

35

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出し

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

単一式関数

36

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

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

• return がない

単一式関数化

Copyright © 2014 Sansan, Inc. All rights reserved.

単一式関数にする

37

単一式関数化

行数削減

Copyright © 2014 Sansan, Inc. All rights reserved.

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

38

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

安全呼び出し

39

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

40

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

if, else if,… は when に

41

Java to Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

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

42

• メンバ変数の名前

• 可能な箇所は var → val に

• 遅延初期化に

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

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

• 単一式関数に

• 安全呼び出しに

• if, else if, … は when に

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

Copyright © 2014 Sansan, Inc. All rights reserved.

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

43

Java to Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

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

44

Java to Kotlin

Copyright © 2014 Sansan, Inc. All rights reserved.

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

45

Java to Kotlin

実はここは Nullable

Copyright © 2014 Sansan, Inc. All rights reserved.

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

46

Java to Kotlin

実はここは Nullable

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

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

Convert Java to Kotlin したら、

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

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

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

よろしければぜひどうぞ!!

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

明日は↓で LT します!

また明日お会いしましょう!!

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

おわり。