表題の通りKotlinの勉強会に行ってきました。
ただ、参加しようと思ったらすでに満員だったので、参加する方法ないかどうか思案していたら、発表者枠が空いていたので、発表者枠で参加しました。Kotlinさわったことなかったので、結果としてさわることになりました。これが勉強会駆動勉強というやつですね。
発表資料はこちらです。
www.slideshare.net
体調が悪かったので、遅れての到着となり、たろうくんさんの発表ややんくさんの発表を聞けなかったのが残念です。後、朝に「資料まだできてない」とツイートした所、参加者の方がキャンセルしてしまったので、申し訳ないことをしたなと思っております。
参加者はAndroiderがかなり多く、Androidでの開発言語がまだJava8に対応していないことから、Kotlinがかなり魅力的に見えていることが伺えました。実際、kiriminさんが発表にてfindViewById
がいらなくなってすごい嬉しい的なことをおっしゃられていましたし、クロージャーでOnClickListener
を書けるところなどはAndroider的には嬉しいところが多いと思います。
僕の発表の後のあやぴーさんの発表はClojureからKotlinで作ったjarを呼び出すという気持ち悪い発表でKotlinとは名ばかりのClojureの発表になっていて面白かったです。(Clojureをやるとは言っていない)
むろほしさんはしゃべるのがすごい上手なので、プレゼンのテクニックを教えてもらいたいです。
さて、僕の発表ですが、jQueryのajax関数用の型定義を書くという内容からAltJSとしてのKotlinの現状について発表しました。元々はTypeScriptと比較していこうという内容を考えていたのですが、大して面白くもないし、TypeScriptの圧勝なので、どうやったらKotlinをAltJSの対抗馬とできるか考えてみただけです。
また、jQueryのajax関数の型定義を書くことを発表内容としてましたが、元々はVanila JSでXHRでいいかなと思っていて、それでサンプルを書いていた所、JSONのパース方法で型安全にやる方法が見つからず、klaxonやKotsonを試してみたのですが、Kotlinのバイナリー互換性が取れない(これらのライブラリーは0.11.9?とか0.12.000くらいで、僕の環境は0.12.200)ため、XHRを使うのをやめて、jQueryの型定義をどうやるかという方法に落ち着いたという紆余曲折があります。
なお、JavaScriptにコンパイルするだけであれば、次のようにすることも可能であることを勉強会が終わった後の今この記事を書いている最中に、Kotlinのコードjson.ktを見ていて発見しました。
val json : String = raw val person: Person = JSON.parse<Person>(json)
また、発表中、オブジェクトがJavaScriptの実装次第でエラーが発生するパターンがありましたが、これも次のように周りくどい処理を行うと、プレインなJsonObjectになるので、一々json
関数を呼び出さずにできます。(これも今知った)
val person: Person = Person("foo", "bar") val json: String = JSON.stringify(person) val p: Person = JSON.parse<Person>(json)
Kotlin2Jsのエコシステムについては、心に余裕があれば遊びでGradleプラグインを作ろうかなと思います(誰か作ってくれないかな)。要件としてはこんな感じになる予定です。
あと遊びでrequireJSの型定義情報を作るかもしれません
ただ、まあ、正直TypeScriptでいいじゃんというのもあるので、完成しない気もします
おわり。かえりはてんてんさんと新宿まで一緒に帰りました。