Kotlin Advent Calendar 2013
はじめに
12月です。アドベントカレンダーの季節です。1年あっという間ですね。 去年は全部俺のKotlinアドベントカレンダーをやりました。 1年前と比べるとKotlinの知名度はだいぶ上がったと思いますが、それでも身近なKotlin使いはなかなか増えず。。ということなので今年はアドベントカレンダーを断念しようと思っていました。が.....
今年はKotlinアドベントカレンダーないの?
— 尾古 豊明(パトラッシュ) (@patorash) 2013, 11月 13
勢いで作った!/Kotlin Advent Calendar 2013 http://t.co/I2ejislQ4I #adventar RT @patorash: 今年はKotlinアドベントカレンダーないの?
— たろう (@ngsw_taro) 2013, 11月 13
と、こんな感じの流れで今年もやることにしました!! まだまだ空きだらけなので参加者募集中です!
今年のKotlinの出来事
Kotlin Advent Calendar 2013の1日目のエントリです。今年のKotlinの出来事を振り返ってみます。
マイルストーン5がリリース(2月)
(クラス内ではなく)トップレベルに定義される関数などを含むコードは、Javaのクラスのstaticなメソッドなどにコンパイルされます。例えばパッケージcom.sample
に属する関数hoge
があったときに、コンパイル後はクラスcom.sample.namespace
のstaticメソッドhoge
になります。この方法はJavaでの利用に問題があります。com.sample1.namespace
とcom.sample2.namespace
の2つのクラスがKotlinにより生成されたとき、Javaコード上で両者を同時にインポートできません。このリリースでは、パッケージcom.sample
に対してcom.sample.SamplePackage
という名前のクラスを生成するようにして、この問題を解決しました。
うっかりメモリリークを防ぐために、KotlinではネストするクラスをデフォルトでJavaで言うstaticクラスにしました。
可変長引数は、引数リストの最後に置く必要があります。また、引数リストの括弧の外側に関数リテラルを記述するには、関数オブジェクトを引数リストの最後に置く必要があります。マイルストーン5からこれらを同時に扱うことができるようになりました。つまり、引数リストの最後に関数オブジェクトを取り、その前に可変長引数を取る、という具合です。
デフォルト値が設定されている引数を持つコンストラクタを持つクラスをコンパイルしたときに、デフォルトコンストラクタ(引数を取らないコンストラクタ)も生成するようになりました。
Rangeがパワーアップしました。Comparable
のすべてのサブタイプで演算子..
によりRangeが定義できます。
マイルストーン5.1がリリース(2月)
ミュータブルな引数が禁止になりました。引数は必ずイミュータブルとなります。
Javaのprotected staticメソッドにKotlinコードでもアクセスできるようになりました。
クラスオブジェクトのメンバーにJavaからアクセスできるようになりました。注意:最新バージョンではこの方法ではアクセスできません。
日経ソフトウエアに掲載(3月)
日経ソフトウエア5月号にKotlinの記事が掲載されました。
ドット演算子のサポート予告(4月)
エイプリルフールのジョークなので、注意してください。
ドット演算子によるメンバアクセスをフックする機能です。
fun Foo.dot() { println("a dot!") }
このように記述します。Foo().hoge()
のようなコードが実行されると、Foo#dot()
が呼び出され、その後にFoo#hoge()
が呼び出されます。
公式ブログではこの機能の応用例を解説しています。
マイルストーン5.2がリリース(4月)
SAMコンストラクタのサポート。SAM(Single Abstract Method)なインタフェースに対して関数リテラルを渡すだけでインスタンス化できるようにした構文糖衣をサポートしました。例えばRunnable
の匿名サブクラスのインスタンス生成は次のように記述できます。
SwingUtilities.invokeLater(Runnable { doItNow() })
マイルストーン5.3がリリース(6月)
Delegated Propertyという機能が追加されました。プロパティへのアクセスを他のオブジェクトに委譲することができます。
fun
キーワードを伴って宣言される関数は第一級オブジェクトではなく、高階関数の引数や戻り値に指定することはできませんでしたが、このマイルストーンからそれが可能になりました。
詳細は以前のエントリをご覧ください。
クラスオブジェクト内の定数、Javaからの扱いやすさ向上(6月)
class Foo { class object { val bar = 1 } }
このようなコードがあるとき、Kotlinでbar
にアクセスするにはFoo.bar
のように記述しますが、JavaからはFoo.object$.getBar()
と記述する必要がありました。今ではJavaでもFoo.bar
のようにアクセスできます。
第1回かわいいKotlin勉強会開催(7月)
第1回かわいいKotlin勉強会が開催されました。この頃以降、Kotlinアイドルが巷で有名になっていきます。
マイルストーン6がリリース(8月)
SAMインタエースの扱いがもっと簡単になりました。今回のリリースで次のようなコードが期待通り動きます。
SwingUtilities.invokeLater { doItNow() }
アノテーションの引数にenum
を持つことができるようになりました。
Android StudioでKotlinが使えるようになりました。
マイルストーン6.1がリリース(10月)
関数リテラル内でのラベル付きreturnを行えるようになりました。
その他細かい改善があります。日本語の解説があります。
JJUG CCCのJVM言語BOFに登場(11月)
日本Javaユーザグループ主催のカンファレンスで、JVM言語パネルディスカッションにKotlinが参戦しました。Null安全について紹介したスライドはこちら。
おわりに
今年もKotlin自体の大きい進化がありました。また、JavaScript対応も本格的になってきました。Kotlin勉強会や、大きなカンファレンスでの発表、雑誌掲載などで国内における注目度はかなりアップしたと思います。Ceylon 1.0のリリースがあったり、Java 8が登場間近だったりでこれからのKotlinにも目が離せないですね!!!!!