Kotlin勉強会に参加した


AndroidでKotlin勉強会@Sansan株式会社に参加しました。基調講演としてロシアのJetBrains社でKotlinの開発チームに在籍している@yanex_ruさんが、日本語でKotlinについて話されていました。

下記は自分のメモですが、もし訂正したいなどあれば編集リクエストをください(最後になるに従って内容が減ってるのは集中力がなくなったからです)。

基調講演

JetBrainsの@yanex_ruさん

  • JetBrainsはロシアの会社って知ってますか?
  • 数年前山崎まさよしに興味を持ったのがきっかけで日本語を勉強しました
  • Android1.0の話から
    • Android1.0はJava6だった
    • Android6.0でもJava6...
  • Javaの問題点
    • コードの量が多い
      • 例えばsetOnClickListnerで一行やりたくても最低4行
        • Why!? Java Language!?
    • IDEが勝手に作ってくれるとしてもそれって本当に必要な記述?
  • JavaよりKotlinのいいところは?
    • JavaでできないことがKotlinで出来る
      • inlineアノテーションでコードのインライン化が出来る
    • 安全にできる
      • KotterKnife
  • Javaとの互換性は100%
    • KotlinからJavaのメソッド呼べるし逆もできる
    • 制約について
      • Androidはメソッド数が64Kを超えるとビルドできない
      • Kotlinはだいたいメソッド数8000、サイズは1MB
  • 次のKotlin1.0リリースのために今はLintを書き直してる

会場の方から出た質問

Kotlinを作るきっかけは?

  • Java6はコードが多い
    • Scalaを使ってみたが難しすぎる
    • Groovyは少し遅い
  • JetBrains(IntelliJで)はそもそも色々なコンパイラを作ってたから新しい言語を作るのは難しくない

今後のバージョンではSwiftのような破壊的な仕様変更はあるの?

  • 必要なら変更するけどできるだけ互換性を持たせたい

LT: KotlinをJavaで理解する

Sansan株式会社 山本純平さん(EightのAndroidアプリを作ってる)

  • KotlinでRxJavaを使いやすいようにするライブラリを作ってます
  • m13のSeald Classが導入されてからEightアプリで採用し始めた
    • Kotlin比率12%ぐらい
  • JavaとKotlinの互換性100%というので調べてみた
    • Not NullなKotlinの変数にJavaから値を入れるとぬるぽ
    • KotlinはSingletonがクラスの命名で宣言できるがJavaからアクセスするときはINSTANCEという呼び出し
    • Package levelはJavaからアクセスするときはファイル名.ktがクラスになりメソッドアクセス(これはアノテーションでJVM Nameを変更できる)
    • Kotlinの拡張関数もJavaからアクセスする際にはファイル名がクラスになるので関数はstaticメソッド
    • let関数はJavaから見るとStandardKtクラスのletメソッドになる(Standard.ktファイルにletが実装されてるから?)
    • Kotlinインターフェースのデフォルト実装はJavaから見るとDefaultImplsにある
  • プロジェクトではJavaで使うことを意識してKotlinを書くことも重要かなと思ってる

LT: RxBinding-kotlin

CyberAgent @satrufujiwara さん

  • m10くらいから検証してm12くらいから使い始めた
  • RxBindingについて
    • NotRxAndroidという名前だった
  • RxBinding-kotlin
    • 使い勝手が良い
    • lambda式と拡張関数と相性がいい
    • RxBinding(Java)だと各ビューの頭にRxってついてたりするがRxBinding-kotlinはシンプル
    • ライフサイクルを考えないとsubscribeされたままだと注意が必要
    • 拡張関数はRxBindingで繋げる
    • 具体的には「トグルボタンでon/offしてお気にい入り」するようなのを共通化したり

LT: 出会って4分で即実装

  • Kotlin歴2日
  • ライブコーディングしてバルスする
    • まずJavaをIDEからKotlinに変換

LT: 俺たちのKotlinが AndroidにJava8が来たくらいでいらない子になるわけがない!

  • Java8があればKotlinいらないんじゃない?というのは違うよ
  • Optional
    • Java8のOptionalは冗長
    • KotlinのOptionalはより強制力が強い
  • ラムダ式
    • Java8でかける
      • 正体は匿名クラス
    • Kotlin
      • 高階関数が使えて直感的

LT: 100 lines or die

  • Javaでこんなコードありませんか?
    • ファイルの行数が多いと時間かかってアニメを見る時間が減る

LT: 仕事でKotlin使ってAndroidアプリを作った

  • Sprinqleというアプリを作った
  • Kotlinを使ってよかったこと
    • コードの記述量減るよね
    • JavaかければKotlinすんなり書ける
  • Kotlinを使って良くなかったこと
    • ない

LT: AndroidでKotlinフル活用プログラミング

  • 自称Kotlinエヴァンジェリスト
  • ディズニーランドアプリをKotlin100%で作ってる