この記事は、株式会社Y's アドベントカレンダー 1日目の記事になります。
概要
あまり有益な内容は書けないかもしれません。
その節はごめんなさい。
1、2週間ほど、kotlin/spark(マイクロフレームワーク)で
社内教育用のダミーデータを生成する簡単なAPIを作ってました。
で、色々嬉しかったことを羅列していきます。
開発環境
- Debian 7.6
- kotlin 1.1.60
- gradle 4.2.1
- sparkjava 1.0.0-alpha
- IntelliJ IDEA
嬉しかった3つのこと
スマートキャスト
従来、Javaだと型チェックして早期リターンする時、
class Hoge {
private int foo;
public Hoge(int foo) {
this.foo = foo;
}
public int getFoo() {
return foo;
}
}
public void fuga(T hoge) {
if (!(hoge instanceof Hoge)) {
return;
}
Hoge h = (Hoge) hoge;
System.out.println(h.getFoo());
}
みたいに、チェックした後にキャストする処理を書かないと使えなかったと思いますが、
kotlinだと
data class Hoge(foo: Int) {}
fun fuga(hoge: T) {
if (hoge !is Hoge) {
return;
}
System.out.println(hoge.foo);
}
と、一度型チェックしたらキャストまでしてくれるという代物。
とても直感的。great.
あと、 is 演算子の前に否定を入れることができるので()でくくる必要もない! beautiful.
ラムダ式
sparkでルーティングを定義するとき
fun main(args: Array<String>) {
get("/hello") { request, response ->
"Hello, Spark"
}
}
最終に書いた処理・表現が返るから、簡潔にかけるのすごい。
Javaもラムダ書けるけど、AndroidはJava7で動くから、
少々気にしなきゃいけないこと多くてなぁって。
あとは好みだけど、()内に書くより、{}で書けるのがすこ。
データクラスとプライマリコンストラクタ
これは非常に画期的だと思う。
今までsetter/getterしかない、いわゆるPOJOを必死に作ってたけど
それを
data class Hoge(name: String, age: Int) {}
と、クラスのプライマリコンストラクタに渡してあげるだけで、表現可能だってこと。
単純なことだけどテンションあがったw
class書いて、コンストラクタ書いて、フィールド定義して、getter作る、
なんてことしなくてもいいのは良き。
いつかセカンダリコンストラクタ使ってやんよ
他にも
- 使いたかった無名関数!!
- コンパイラでnull安全保証
- ; つけなくていいの楽
- 意外と便利な名前付き引数(IntelliJ IDEA+Kotlin Pluginとの併用で最強)
などなど、感動したことはありますが、
今現在必死にこれ読んでるので、もっと実験していきたいなぁって思います。
終わり
kotlin 1.2から、swiftのみならず、JavaScriptに変換して
Webアプリケーションを作れるって聞いたので、もっとkotlinの勉強して、
いつかkotlinのAdovocatorに、俺はなる!!
枠が残ってたら、社内教育向けの簡易APIをsparkで作ってみたので、
その話もするかもしれないし、しないかもしれないです。
おわり。
次は 2日目 @Bong さんの記事です。お楽しみに!