今週は第2回を開催しました。
[第2回の様子]
2020/02/12に第2回を開催した。
参加メンバーは自分を含めた前回の3名に加えて、4人が新たに参加し、計7名での開催となった。
新たに加わってくれたメンバーは自分たち3人と異なり、レベルの差はあれどそこそこKotlin経験のあるメンバーだったので、ところどころ解説をしてもらいながら進めることができた。
前回の反省を生かして、大きなディスプレイのある会議スペースを予約して実行した。顔を合わせて実施したので、モブラーニングと称してLearn Kotlin by Exampleを1ページ進めるごとに「やったー!」を実行した。快く両手を上げてくれた参加者のみなさま、ありがとうございます。
内容としては、Learn Kotlin by ExampleのIntroductionの章をFunctionsからClassesまで進めた。4ページ進んだので、4回「やったー!」を実行することができた*1。
Kotlin経験者、特に(Kotlin以外も含めて)言語そのものの実装部分に詳しい参加者がいたので、この文法はこういう理由でこうなんじゃないかなどと深い話もしながら、今回もあっというまの30分間だった。
[学んだことや疑問点]
- Infix functions
- obj.someFunc()の「.」と「()」を省略した書き方ができる
- 普通のアプリ開発ではあまり使わないとのこと
- Operator functions
- これもあまり使わないとのこと
- やはり経験者がいるとこういう勘所みたいなのが聞けていい!
- varargパラメータ
- 可変長引数だこれ
- Pythonっぽく*でvarargパラメータを展開できる
- 変数宣言はvar(再代入可)とval(定数宣言)がある
- 型宣言なしで変数に値を代入すると型を推論してくれる
- 初期化せずに変数を読み込むとコンパイルエラーにんある
- Nullになる場合はString?型、Nullにならない場合はString型
- Class宣言にはヘッダとボディがある
- ヘッダでパラメータの型を指定する、初期値も指定可能
- ヘッダでvalを利用するとsetterなしになる
- setterというかJavaのpublic参照みたいな感じで直接値を代入する
- ボディは{}で囲む
- ヘッダもボディも省略可能*2
- でも結局Hello Worldの直後に出てきたPerson型の中身はよくわからない……
[まとめ]
来週はGenericsとか継承を理解するぞ!
それにしても、モブラーニング楽しい!
来週は参加者がさらに増える、かつ、別オフィス勤務のためリモートでの参加なので、「やったー!」がうまく機能するかちょっと心配……。
*1:最初ちょっと恥ずかしそうにはじめてしまった、反省。
*2:ボディなしはJavaのSerializableのようなマーカーインターフェース的な使い方をするのかな、と思ったら幽霊型というのがあるらしい:https://speakerdeck.com/boohbah/kotlintephantom-type-number-kotlin-sansan