2016-04-27 タイムインターメディア技術部会
Javaを捨ててKotlinに移行しよう!
- JetBrainsが開発したJVMで動くコンパイラ言語
- Javaと完全互換
- Null安全
- 関数型言語からの影響
- ラムダ式
- 高階関数
- 末尾再帰
- 多値
- パターンマッチ
- 型推論
- ifなどが構文ではなく式(値を返す)
- 中値記法
- Scalaの影響を受けているがコンパイルがScalaより速い
- Swift(2014〜)に似てるって言われるけどこっちが先(2011)
- 名前の由来はJavaと同じで地名 https://goo.gl/maps/3mMmGKpeFsB2
- ボイラープレートからの解放
- Javaのアノテーション地獄からの解放
- Java7環境でもラムダ式が使える
→ Javaよりも開発効率が向上する!!!
(デモ)
(デモ)
(デモ)
val x: String = "xyz" // 定数
var a: String = "abc" // 変数
var x: String = null // コンパイルエラー
var a: String? = null // OK
nullを許容する変数は型名の末尾に?記号を付けなければならない。
var ints = listOf(1, 2, 3, 4, 5) // リストの生成
ints.map { it * 2 } // 各要素を2倍する。itはラムダ式の暗黙の引数
(mapの他にfilter, foldなども使える)
同等なSchemeコード:
(map (lambda (x) (* x 2)) '(1 2 3 4 5))
Java:
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public Sttring getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Kotlin:
data class User(name: String?, age: Int?)
おまけ: Java+Lombok:
@Data
@AllArgsConstructor
public class User {
private String name;
private int age;
}
他にもあるけど使ったことがあるものだけ。
https://github.com/JakeWharton/kotterknife
Butter Knife http://jakewharton.github.io/butterknife/ のKotlin版。
Kotter Knife以前
private val imageView: ImageView = findViewById(R.id.my_image_wiew) as ImageView
Kotter Knife以後
private val imageView: ImageView by bindView(R.id.my_image_view)
https://github.com/chibatching/Kotpref
SharedPreferenceを使いやすくするライブラリ