[レポート]「第4回Kotlin勉強会 @ Sansan」に参加してきました
まえがき
第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
- Container Component
- View Templateでつらいところ
- XMLそのものが辛い
- タイプセーフではない
- DataBinding周りの補完が不十分
- kaptつらい
- AnkoはKotlinでAndroidアプリ開発をするのに便利機能がたくさん
- Ankoを使ったら、DataBindingも簡単にできる
- しかし、タブレット対応などが課題であり、まだネタ枠だが、可能性を感じる
5.ラムダ式禁止おじさん
要約すると、ラムダ式を使うこと。
- メソッドや関数をオブジェクト化するコストが掛かる
- ラムダ式の場合はinlineのおかげでノーコスト
懇親会
ビールと料理をいただきました。ごちそうさまでした。
とても良かったです。
僕が話していた人は、iOSとサーバー側の人でした。
Android以外の人からも注目されてるんだなっと思いました。
まとめ
とても良かったと思います。
DSL、 Kotlin1.1の話題、 Java->Kotlin、 Anko
Kotlinのいいところを網羅していたと思いました。
Kotlin勉強会 @ Sansan の今年分は終わりですが、次回も是非参加したいと思いました。