SlideShare ist ein Scribd-Unternehmen logo
1 von 51
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
おわり。

Weitere ähnliche Inhalte

Was ist angesagt?

Qlik Tips 20211221 チャートデザイン~効果的な色の使用例
Qlik Tips 20211221 チャートデザイン~効果的な色の使用例Qlik Tips 20211221 チャートデザイン~効果的な色の使用例
Qlik Tips 20211221 チャートデザイン~効果的な色の使用例QlikPresalesJapan
 
Allocators@C++11
Allocators@C++11Allocators@C++11
Allocators@C++11Cryolite
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測Toshiyuki Hirata
 
Automotive agile 自動車業界を取り巻くアジャイル・スクラムの潮流
Automotive agile  自動車業界を取り巻くアジャイル・スクラムの潮流Automotive agile  自動車業界を取り巻くアジャイル・スクラムの潮流
Automotive agile 自動車業界を取り巻くアジャイル・スクラムの潮流Kazutaka Sankai
 
[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る
[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る
[8thWall + three.js] #stayhomeを楽しくするWebARを一から作るAtsuto Inoue
 
20221018 QlikTips 変数でできること
20221018 QlikTips 変数でできること20221018 QlikTips 変数でできること
20221018 QlikTips 変数でできることQlikPresalesJapan
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかYoshitaka Kawashima
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系CoqについてYoshihiro Mizoguchi
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門Tadahiro Ishisaka
 
Blueprint Tips 30選
Blueprint Tips 30選Blueprint Tips 30選
Blueprint Tips 30選PaperSloth
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用nagise
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?Yosuke Onoue
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なことhistoria_Inc
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解したtorisoup
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発Shuto Suzuki
 
APIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッドAPIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッド友隆 浅黄
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021whywaita
 
Monitoring - 入門監視
Monitoring - 入門監視Monitoring - 入門監視
Monitoring - 入門監視Eiji KOMINAMI
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 

Was ist angesagt? (20)

Qlik Tips 20211221 チャートデザイン~効果的な色の使用例
Qlik Tips 20211221 チャートデザイン~効果的な色の使用例Qlik Tips 20211221 チャートデザイン~効果的な色の使用例
Qlik Tips 20211221 チャートデザイン~効果的な色の使用例
 
Allocators@C++11
Allocators@C++11Allocators@C++11
Allocators@C++11
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
Automotive agile 自動車業界を取り巻くアジャイル・スクラムの潮流
Automotive agile  自動車業界を取り巻くアジャイル・スクラムの潮流Automotive agile  自動車業界を取り巻くアジャイル・スクラムの潮流
Automotive agile 自動車業界を取り巻くアジャイル・スクラムの潮流
 
[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る
[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る
[8thWall + three.js] #stayhomeを楽しくするWebARを一から作る
 
20221018 QlikTips 変数でできること
20221018 QlikTips 変数でできること20221018 QlikTips 変数でできること
20221018 QlikTips 変数でできること
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
 
Blueprint Tips 30選
Blueprint Tips 30選Blueprint Tips 30選
Blueprint Tips 30選
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?
 
出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと出張ヒストリア ブループリントを書くにあたって大切なこと
出張ヒストリア ブループリントを書くにあたって大切なこと
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
APIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッドAPIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッド
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
Monitoring - 入門監視
Monitoring - 入門監視Monitoring - 入門監視
Monitoring - 入門監視
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 

Mehr von 健一 辰濱

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合健一 辰濱
 
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 を適用させていく健一 辰濱
 

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