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

Java → Kotlin 変換 そのあとに。

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