kdnakt blog

hello there.

会社でKotlin勉強会(第9回)を開催した

今週は第9回を開催しました。新年度もやっていくぞ!

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

 

 

[第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
    • 関数を引数にとる関数だけでなく、関数を戻り値とする関数も高階関数というらしい。知らんかった。
    • 引数の型として関数を定義する場合に、その関数の引数は()で囲まないといけないっぽい
    • 関数を引数に渡す場合は::関数名のようにする。Javaのメソッド参照っぽい。
    • 高階関数に渡す引数の関数が、引数の中で最後にある場合は、高階関数呼び出しの後ろに関数を書くこともできる(下記参照)
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章も終わる!ハイペース!!