[レポート]「第4回Kotlin勉強会 @ Sansan」に参加してきました

2016.12.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

まえがき

第4回Kotlin勉強会 @ Sansan - connpass に参加してきました。

Kotlinは個人アプリでたくさん使っていますが、
なかなか予定が合わず、やっとKotlin勉強会に参加することできました!
メモベースになりますが、気になったところをレポートします!

LT

1.KotlinでDSL

  • IcePickのKotlin版:yamamotoj/Pikkel: An alternative to IcePick for Kotlin.を公開中
  • DSL
    • JavaのBuilderパターンもDSL
  • Java Builderパターンだと、本質的なじゃない部分が多い
  • SMC
    • State Machine Compiler
    • Kotlinでやってみる
  • DSLをわかりやすくする
    • 構文、インタフェース
  • DSLのポイント
    • 一貫して、()を省略。英語の語順にするっと見やすくなる
    • ラムダ式
    • レシーバを指定したラムダ
      • 拡張関数のスコープを限定にする
    • invokeオペレータ
      • しかも拡張することができる
    • infix中置関数

2.Java -> Kotlinに変換してその後に

  • Android StudioでKotlinに変換する事ができるが、Kotlinっぽくない

Kotlinっぽくするために。

  • 接頭辞mをはずす
    • 勝手にget,setが作られるため、その時のメソッド名がsetMidなどになってしまう
  • ver -> valに変換する
    • 再代入することがないのであれば、valにする
  • by lazyで遅延評価する
    • 参照時に初期化できるので、findByIdを使いたい時に有効
  • NotNullにできるのはする。!!はさける
  • スコープ関数に置き換える
    • let with run apply
  • 単一式関数
    • 一行retruenは=にする
  • 安全呼び出し
    • Nullableの呼び出しは?.にする
  • if else if -> whenに置き換える
  • 使われていない関数パラメータの型チェック
    • Javaの返り値のNotNullなどをめんどうみてくれないので注意
    • NotNull変換されたけど、実はNullable

3.Mapped TypeとPlatform Typeの話

  • KotlinでもNPE(Null Pointer Excetion)は発生する!
    • しかしフルKotlinコードならなかなか起きない
  • Javaからのオブジェクトを使うと起きる可能性がある
  • Platform Type
    • Javaのreturn値は何もないとString!となる
    • 扱いはとしては、Stringでもあり、String?でもある
    • すなわちビルド時のNPEは
  • Mapped Type
    • Javaのint,floatなど
  • Listでも同じことがいえる
  • ちゃんと@NotNull @Nullable @ReadOnly @Mutableをちゃんと付けるとKotlinでもいい感じにしてくれる
  • 詳しくは以下を参照。【!ってなんだ】KotlinとJava、nullとPlatformType【NullableにNotNull】 - Qiita

4.Ankoでコンポーネント指向

  • コンポーネント思考
    • 1つの画面に対して1つのViewModelではなく、Viewに対してViewModel(分割単位は機能単位かな)があり、それがコンポーネント。1つの画面に複数のコンポーネントで構成される
  • Androidの場合
    • Container Component
      • Activity/Fragment
    • Presentationsl Componetnt
      • View
    • View Template
      • layout.xml + DataBinding
  • View Templateでつらいところ
    • XMLそのものが辛い
    • タイプセーフではない
    • DataBinding周りの補完が不十分
    • kaptつらい
  • AnkoはKotlinでAndroidアプリ開発をするのに便利機能がたくさん
  • Ankoを使ったら、DataBindingも簡単にできる
  • しかし、タブレット対応などが課題であり、まだネタ枠だが、可能性を感じる

5.ラムダ式禁止おじさん

要約すると、ラムダ式を使うこと。

  • メソッドや関数をオブジェクト化するコストが掛かる
    • ラムダ式の場合はinlineのおかげでノーコスト

懇親会

ビールと料理をいただきました。ごちそうさまでした。
とても良かったです。
僕が話していた人は、iOSとサーバー側の人でした。
Android以外の人からも注目されてるんだなっと思いました。

まとめ

とても良かったと思います。
DSL、 Kotlin1.1の話題、 Java->Kotlin、 Anko
Kotlinのいいところを網羅していたと思いました。
Kotlin勉強会 @ Sansan の今年分は終わりですが、次回も是非参加したいと思いました。