magiepooh blog

memo程度にね。一旦ね。

AndroidでKotlin勉強会 @ Sansan

Kotlinの勉強会に参加したのでまとめます。 http://connpass.com/event/22189/

基調講演(日本語) JetBrains @yanex_ru さん

Ankoの開発者、JetBrainsのYan Zhulanowさんの発表です!

  • Javaはコード量が多い。IDEが補完してくれているから書きやすくなっている。
  • 簡潔性、安全性、互換性
簡潔性

コードが短くなれば、エラーが減り、開発が早くなる。メソッドinlineを使うと、そのメソッドは呼び出し元に展開されるので、newを使ったりしてコストが高いメソッドに効果的。

互換性
Androidをしっかりサポートする

AndroidのDaggerをサポートする必要があって、lateinitをサポートしたり。

感想

確かに、とにかく簡潔。シンプル。互換性も考慮されているし、安全に使えますね! また、「Kotlin1.0は本当にもうすぐ来るよ!」「リリースして時間ができたら、Lintも対応したい」と仰っていたのでとても楽しみですね。 これからも、出来る限り破壊的な変更は入れないで、対応する(本当に必要な場合は仕方がない)らしいので、これからの開発者にとっても安心。今そこらへんを真剣に議論してるみたいです。

IDE作ってるから新しい言語を作るのもそんなに難しくないって言うJetBrainsさんがかっこよすぎました。

KotlinでJavaを理解する @boohbah さん

JavaからKotlinはどのように見えるのかを比較して理解していくという発表でした。結構コード量が多い発表だったため詳しくは動画を見ていただく方がいいと思います。

  • val/var
  • NullSafety
  • Singleton object
  • Companion object
  • Package level function -> Javaではクラス内にしかメソッドを書けないががKotlinは外にも書ける。
  • 拡張関数
  • Operator overload
  • 関数オブジェクト
  • 高階関数
  • let関数
  • 関数のデフォルト値 -> @JvmOverloadsを使用すると全ての引数のパターンが用意される。
  • SealdClass
感想

Javaからどう見えるかを理解するとKotlinの安心感を感じることができます。(互換性やパフォーマンス等)
またJavaに慣れた人はKotlinの理解にも繋がりますね! 普通に発表を聞いていて楽しい内容でした・・!

RxBinding-kotlin @satorufujiwara さん

AmebaFRESH!というサービスをほぼKotlinで開発している。詳しくは→Kotlinアドベントカレンダー

資料

RxBindingとはRxAndroidのView系をRxBindingに移行したもの。RxBinding-kotlinはRxBindingをKotlinの拡張関数で使えるようにラップしてくれている。Kotlinで書くときは相性がとてもいい。

RxBinding-kotlinではonErrorやonCompleteなどをサポートしない無限ストリーム、Subscribe時に初期値を持っていることに注意。RxLifecycleなどでライフサイクルを管理していかないと、死ぬ。

便利な例 (コードメインなので、スライドを見てください)
  • viewPagerのオートローディング
  • RecyclerViewのオートローディング
  • ToggleButtonの処理を共通化

拡張関数にすることで不要なフィールドやメソッドを書かなくて良い、コードの再利用性が高まる。オートローディングの処理を移すのも簡単。

感想

僕も一緒にAmebaFRESH! を開発していたので、RxBinding-kotlinの便利さにはいろいろ感じていました。 特に、発表でもありましたが、infinitely scrolling系の実装などを実装するときはすごい良かったです。 ぜひ、みなさんに使って欲しいライブラリですねー!

出会って4分で即実装 @fushiroyama さん

Kotlin歴2日の@fushiroyamaさんが爆速でバルスするアプリを書くライブコーディングです。

  • AndroidStudioで生成されたJavaのコードを一発変換。
  • IDEのサポートが強く補完がホスピタリティ溢れる
  • 時間切れ・・w

Kotlinを2日前に触ったが、とても書きやすい言語。

感想

@fushiroyamaさんの発表はいつもとても面白くて楽しかったです。笑 僕もKotlinはとてもわかり易い言語だと思います・・!

俺たちのKotlinが AndroidにJava8が来たくらいでいらない子になるわけがない! @kirimin さん

資料 Java8とKotlinの違い (動画 → https://t.co/EWTfbADZ5F)

Optional

Javaは全てNullableな変数をOptionalを使って扱うが、KotlinはNonNulな変数を作ることができる。

ラムダ式

Javaでは自分でインタフェースを定義する必要があるが、Kotlinはコールバック用のインタフェースを作る必要がない

リスト操作

Java8ではStreamを扱える。KotlinだとIteratorにいろいろなメソッドが生えているので、様々なことが実現可能

感想

Java8でもサポートできない(使いにくい)部分がKotlinだとすっきり書ける。 個人的にもJava8よりも全然Kotlinでいい気がします。。笑

less than 100 line or die @mattak さん

コード量が増えると理解にかかる時間が増え、バグ発生率が高くなる。 (動画 →https://www.youtube.com/watch?v=3vcDgBvsj4E&feature=youtu.be)

Kotlinを使うとJavaに比べ、10倍(当社比)くらいの可読性を実現・・・!

感想

短いコードは理解スピードが短くなり、早く仕事ができて、早く帰ってアニメを見れるから、みんなハッピーになる。

仕事でKotlin使ってAndroidアプリを作った @qmihara さん

  • 記述量が減った
  • Null Safety
  • 拡張関数 -> 拡張関数名がバッティングしない所がよかった。
  • Kotlinを使ってよくなかったことはない。
感想

KotlinかわいいよKotlin

AndroidでKotlinExtensionプログラミング @ngsw_taro さん

資料

RxLifecycle
apiAccess().
.compose(bindToLifecycle<MyData>())
.subscribe {

apiAccess().
.bindToLifecycle()
.subscribe {

実装方法はスライドを参考に。

明示的Activity起動問題
TargetActivity.intent(this, data)

thisを消した↓

ToastActivity.intent(data).start()
感想

拡張関数をうまく使ってコードを綺麗に書こうとするの素敵。 個人的にbindToLifecycleがいいなと感じた。 せっかく拡張関数があるので、よりKotlinらしく見やすいコードになっていけばいいなと思いました。

Kotlin勉強会に参加した感想

総じて面白かったし、楽しかった。中の人の話も聞けてよかった。 個人的にプロパティにprivate get()が欲しいと言ったけど、ばっさり切り捨てられた・・・(´;ω;`)ブワッ (リスナー系とかはそうしたいと思うんですけどねー・・)