今週は第9回を開催しました。新年度もやっていくぞ!
前回の様子はコチラ↓
[第9回の様子]
2020/04/01に第9回を開催した。
参加メンバーは自分を含めて6人ほど。前回同様、みんなリモートワーク状態なので、それぞれオンラインミーティングルームに参加する形式で実施した。4/1、年度がわりということでどうやらシステムトラブルが多発していたようで、参加できないメンバーもちらほら。
今回は、C++とか言語処理系に詳しいメンバーにドライバを担当していただいた。途中で関数ポインタとかの用語が出てきて、一瞬つまづき、適当なイメージで合わせて乗り切ったのはナイショ。
C++、またちゃんと勉強してJVMの実装を読む会とかやりたい。いや、勉強する前に読み始めればいいのか?それはまた今度……。
内容としては、Learn Kotlin by Exampleの第3章 Special ClassesのObject Keywordを終わらせ、第4章 FunctionalのHigher-Order FunctionsとLambda Functionsを進めた。
例によって今回もVR参加したのだけれど、利用したアプリの利用規約を読み返したら、アプリ外のオンライン利用は許可されない規約になっていた。なので、画像はナシ。
[学んだことや疑問点]
- Object Keyword(承前)
- object修飾子を使うとシングルトン(復習)
- クラスを定義してなくても、いきなり
object { ... }
でオブジェクトを生成できる - 関数の中で、上のようにオブジェクトを生成することができる
- 関数の中でシングルトンを定義するからといって不変ではなく呼び出しごとに生成することができる(ちょっとこの辺直感と違ってたけど、納得)
fun rentPrice(st: Int, fes: Int, sp: Int): Unit { val dayRates = object { var standard: Int = 30 * st var festivity: Int = 50 * fes var special: Int = 100 * sp } val total = dayRates.standard + dayRates.festivity + dayRates.special println("Total price: $$total") } fun main() { rentPrice(10, 2, 1) //Total price: $500 rentPrice(1, 20, 30) //Total price: $4030 }
object XXX { fun yyy() }
のように書くとXXX.yyy()
でstatic関数っぽくアクセスできるcompanion
修飾子をつけるとclass
の中に上記のstatic関数を埋め込んでクラス名.関数名()
のようにアクセスできる- ただしcompanionオブジェクトはclassに1つだけ
- companionオブジェクトの名前は省略できる
- Higer-Order Functions
fun calculate(x: Int, y: Int, operation: (Int, Int) -> Int): Int { return operation(x, y) } fun main() { val mulResult = calculate(4, 5) { a, b -> a * b } println(" mulResult $mulResult") }
- Lambda Functions
- 型推論ができる場合、できない場合と色々あるのがわかった。そこそこ直感的にわかる。
- 前にループを学んだ時に出てきた
it
記法が出てきた。知ってるもんね。 - メソッド参照だと思っていた
::
は関数ポインタだって書かれてた。似たようなもんか。
[まとめ]
来週はExtension Functions and Propertiesから!
次で第4章も終わる!ハイペース!!