自プロダクトにKotlin導入するために個人的にやった学習方法の紹介です。(LT用資料も兼ねてます)
【Android】Kotlin導入するためにやったこと(説得編)の続きになります。
はじめに
あくまで個人的にやった内容なので、このやり方が必ずしもベストというわけではないです。
学習の流れ
-
I/O '17のKeynoteを見てモチベを高める
-
Kotlin入門までの助走読本を読む
-
公式リファレンスをざっと読む
-
Java to Kotlinを試す
-
Kotlin to Javaを試す
-
Kotlinを書いてみる
I/O '17のKeynoteを見てモチベを高める
まずはGoogle I/OのKeynoteを見てモチベを高める。
(引用) https://youtu.be/Y2VF8tmLFHw?t=1h27m25s
Kotlin入門までの助走読本(PDF) を読む
これを読むだけでKotlinの言語的特徴、Javaとの違い、Kotlin移行時のメリット・デメリットなどが分かるので必読です。
80ページ程度、かつ日本語なのでサクッと読めます。
(引用) https://drive.google.com/file/d/0Bylpznm149-gTGRjOFRkWm9PODg/view の1ページ目
以下、目次引用 & 整形
- 第 1 章 Kotlin について知る
- 1.1 Kotlin とは
- 1.2 Kotlin を使うと何が嬉しいのか
- 1.3 Kotlin の特徴
- 1.4 将来の展望
- 1.5 導入事例
- 第 2 章 Kotlin を学ぶ
- 2.1 環境構築から HelloWorld まで
- 2.2 Kotlin の味見
- 2.3 Java から Kotlin への移行
- 第 3 章 次のステップ
- 3.1 学習方法
- 3.2 コミュニティ
- 3.3 次回リリースの予告
公式リファレンス をざっと読む
公式リファレンスを読むことで基本的な文法やイディオムなどが分かります。
https://kotlinlang.org/docs/reference/
Java to Kotlinを試す
Javaファイルを開いている状態でメニューのCode
> Convert Java File to Kotlin File
からKotlinに変換できます。
テストコードをKotlinに変換してみる
// Java
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
// Kotlin
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, (2 + 2))
}
}
ActivityをKotlinに変換してみる
// Java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
// Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Kotlin to Javaを試す
tools
> Kotlin
> Show Kotlin Bytecode
KotlinのdataクラスをJavaに変換してみる
// Kotlin
data class User(var name: String, var age: Int)
// Java
public final class User {
@NotNull
private String name;
private int age;
@NotNull
public final String getName() {
return this.name;
}
public final void setName(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.name = var1;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public User(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
@NotNull
public final String component1() {
return this.name;
}
public final int component2() {
return this.age;
}
@NotNull
public final User copy(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
return new User(name, age);
}
// $FF: synthetic method
// $FF: bridge method
@NotNull
public static User copy$default(User var0, String var1, int var2, int var3, Object var4) {
if((var3 & 1) != 0) {
var1 = var0.name;
}
if((var3 & 2) != 0) {
var2 = var0.age;
}
return var0.copy(var1, var2);
}
public String toString() {
return "User(name=" + this.name + ", age=" + this.age + ")";
}
public int hashCode() {
return (this.name != null?this.name.hashCode():0) * 31 + this.age;
}
public boolean equals(Object var1) {
if(this != var1) {
if(var1 instanceof User) {
User var2 = (User)var1;
if(Intrinsics.areEqual(this.name, var2.name) && this.age == var2.age) {
return true;
}
}
return false;
} else {
return true;
}
}
}
Kotlinを書いてみる
https://try.kotlinlang.org/ をやってみる
とりあえずJavaっぽく書いてIDEの変換に任せる
まず書いてみると
Option + Enter
(Alt + Enter
)を押すととIDEが教えてくれるので押してみると
シッュとなる(Kotlinらしくなる)
fun increment(num: Int): Int = num + 1
(再掲)シュッとなる前
fun increment(num: Int): Int {
return num + 1
}
単一の式からなる関数定義はreturn
を省略できる
ちなみに戻り値の型が自明なときは型も省略できる
fun increment(num: Int): Int = num + 1
fun increment(num: Int) = num + 1
もう一つ例を挙げるとif
文もシュッと書ける場合があります。
var max: Int
if (a > b) {
max = a
} else {
max = b
}
シュッ(
if
は式なので代入できる)
var max: Int = if (a > b) {
a
} else {
b
}
シュッ(三項演算子っぽくも書ける)
var max: Int = if (a > b) a else b
慣れてきたらコーディング規約やベストプラクティスに沿って書く
FRESH!のコーディング規約は可読性を重視した規約になっているのでとても参考になります。
また、Idiomatic Kotlin. Best Practices.というベストプラクティス集もオススメです。
継続的に勉強するために
- コミュニティに参加する
- Kotlin勉強会: https://connpass.com/search/?q=kotlin
- 情報発信する
- 記事を書いたり発表してみる
- Podcastを聞く
- Talking KotlinというPodcastがあります。(英語)
- フルKotlinでアプリを作ってみる
まとめ
- Kotlin入門までの助走読本(PDF) や 公式リファレンス を読んで基本文法などを学ぶ。
- Java to Kotlinを試してKotlinの場合どう書くかを知る。
- 実際にKotlinを書いてみてIDEの力を使いながら慣れる。
補足
今回Jvmアノテーションについては言及しませんでしたが、既存のJavaプロダクトに導入していく際はJavaからどう見えるかを意識しつつ書く必要もあります。
Kotlinを学ぶという目的だけであれば、フルKotlinでアプリを作ってみるのが個人的にはオススメです。
参考
Latest Posts – Talking Kotlin
http://talkingkotlin.com/
Reference - Kotlin Programming Language
https://kotlinlang.org/docs/reference/
A multi-language Hello | Try Kotlin
https://try.kotlinlang.org
kotlin-prior-learning-book.pdf - Google Drive
https://drive.google.com/file/d/0Bylpznm149-gTGRjOFRkWm9PODg/view
【Android】Kotlin導入するためにやったこと(説得編) - Qiita
https://qiita.com/rkowase/items/a2f26c64c60d04d51c94
【Android】KotlinからJavaへ変換(デコンパイル)する手順 - Qiita
https://qiita.com/rkowase/items/8965bac34804e5e737fa