SlideShare a Scribd company logo
1 of 46
Java → Kotlin 変換 そのあとに。
2016/12/13 第4回Kotlin勉強会@Sansan
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. 7
Java → Kotlin
そのあとに。
Copyright © 2014 Sansan, Inc. All rights reserved.
Android Studio の Code メニュー
8
Copyright © 2014 Sansan, Inc. All rights reserved. 9
Convert Java File
to Kotlin File!
Copyright © 2014 Sansan, Inc. All rights reserved. 10
既存コードを
簡単に Kotlin 化!
Copyright © 2014 Sansan, Inc. All rights reserved. 11
できるけど、
Kotlin らしくない
変換結果も…
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
12
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
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
• Java
• Kotlin
Copyright © 2014 Sansan, Inc. All rights reserved.
メンバ変数の名前
15
• Java
• Kotlin
接頭辞の m は外しておこう!
Copyright © 2014 Sansan, Inc. All rights reserved.
なぜ?
16
• 生成される getter / setter 関数名に残ってしまう
• 例)
これを Java から使うと…
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
17
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一関数式に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
Copyright © 2014 Sansan, Inc. All rights reserved.
おさらい
18
• var
• 再代入可能な変数
• val
• 再代入不可な変数
• 原則として、val を使用して再代入を極力避けるべき
Copyright © 2014 Sansan, Inc. All rights reserved.
var → val に
19
• Java
• Kotlin
↑こいつを val にする
Copyright © 2014 Sansan, Inc. All rights reserved.
var → val に書き換えた
20
val は再代入不可…
Copyright © 2014 Sansan, Inc. All rights reserved.
Val cannot be reassigned 対応
21
val は再代入不可なので、宣言時に代入
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
22
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
Copyright © 2014 Sansan, Inc. All rights reserved.
遅延初期化に
23
• by lazy{…} を使うと、初期化を遅延できる
• 委譲プロパティ
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
24
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
25
• NotNull 型
• null 代入可能
• 型名そのまま
• Nullable 型
• null 代入不可
• 型名のあとに?をつける
Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
26
警告が増えた…orz
Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
27
• !! 演算子
• Nullable な参照を、NotNull に強制的に変換する
• ただし、null に対して !! 演算子を適用すると、
KotlinNullPointerException が throw される
• !! 演算子は原則使用しないことがお勧めされている
• どうしても必要なら、requireNotNull を
Copyright © 2014 Sansan, Inc. All rights reserved.
NotNull 型にできるならして、!! 演算子の除去
28
!! を除去するだけでOK
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
29
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出し
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
Copyright © 2014 Sansan, Inc. All rights reserved.
スコープ関数
30
• let, with, run, apply
• 「Kotlin スコープ関数 用途まとめ」
http://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691e
がわかりやすくて、オススメ!
• newIntent 関数 に apply を使うのがオススメ
Copyright © 2014 Sansan, Inc. All rights reserved.
スコープ関数に置き換える
31
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
• 波括弧 { } で囲まれたブロックがない
• 関数シグネチャに続けて =、その後に式がある
• return がない
単一式関数化
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
• Nullable 変数に null が入っていたら何もしない
→ null チェックを簡素化できる
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
37
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
Copyright © 2014 Sansan, Inc. All rights reserved.
if, else if,… は when に
38
Java to Kotlin
Copyright © 2014 Sansan, Inc. All rights reserved.
変換後に手直ししたい箇所
39
• メンバ変数の名前
• 可能な箇所は var → val に
• 遅延初期化に
• NotNull 型にできるならして、!! 演算子の除去
• スコープ関数に置き換える
• 単一式関数に
• 安全呼び出しに
• if, else if, … は when に
• 使われていない関数パラメータの NotNull / Nullable
チェック
Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
40
Java to Kotlin
Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
41
Java to Kotlin
Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
42
Java to Kotlin
実はここは Nullable
Copyright © 2014 Sansan, Inc. All rights reserved.
使われていない関数パラメータの型チェック
43
Java to Kotlin
実はここは Nullable
“Intent” → “Intent?” にする必要がある!
Copyright © 2014 Sansan, Inc. All rights reserved. 44
Convert Java to Kotlin
したら、
Kotlin らしくするのも
お忘れなく!
Copyright © 2014 Sansan, Inc. All rights reserved. 45
おわり。

More Related Content

What's hot

Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksKazuhiro Sera
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-jaTIS Inc.
 
Developing an Akka Edge4-5
Developing an Akka Edge4-5Developing an Akka Edge4-5
Developing an Akka Edge4-5saaaaaaki
 
Reactive Systems と Back Pressure
Reactive Systems と Back PressureReactive Systems と Back Pressure
Reactive Systems と Back PressureAkihiro Ikezoe
 
PHP Application E2E with Capybara
PHP Application E2E with CapybaraPHP Application E2E with Capybara
PHP Application E2E with CapybaraYoshiaki Yoshida
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみたAsami Abe
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 

What's hot (9)

Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
 
AWS Lambda in Golang
AWS Lambda in GolangAWS Lambda in Golang
AWS Lambda in Golang
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
 
Developing an Akka Edge4-5
Developing an Akka Edge4-5Developing an Akka Edge4-5
Developing an Akka Edge4-5
 
Reactive Systems と Back Pressure
Reactive Systems と Back PressureReactive Systems と Back Pressure
Reactive Systems と Back Pressure
 
PHP Application E2E with Capybara
PHP Application E2E with CapybaraPHP Application E2E with Capybara
PHP Application E2E with Capybara
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
Ruby紹介
Ruby紹介Ruby紹介
Ruby紹介
 

More from 健一 辰濱

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合健一 辰濱
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン健一 辰濱
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O 健一 辰濱
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について健一 辰濱
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今健一 辰濱
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩健一 辰濱
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える健一 辰濱
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on健一 辰濱
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap健一 辰濱
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話健一 辰濱
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama健一 辰濱
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方健一 辰濱
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法健一 辰濱
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing健一 辰濱
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー健一 辰濱
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ健一 辰濱
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話健一 辰濱
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会健一 辰濱
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る健一 辰濱
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく健一 辰濱
 

More from 健一 辰濱 (20)

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 

Java → Kotlin 変換 そのあとに。

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