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

今週は第17回を開催しました。

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

  

 

[第17回の様子]

2020/06/10に第17回を開催した。

 

参加メンバーは自分を含めて4人。引き続き、みんな在宅勤務中なので、それぞれオンラインミーティングルームに参加する形式で実施。今日も自分はVR参加はせず、自粛期間中に伸びきった冬毛のまま素顔で参加。

 

勉強会本編の内容としては、Learn Kotlin by Exampleの第6章 Scope Functionnsのwithapplyの2節を進めた。

今回はすべての動作確認をLearn Kotlin by Exampleのサイト上で実行できた。

 

[学んだことや疑問点]

  • with
    • withは二つの引数をとる
    • 最初の引数がthis扱いしたいオブジェクトで、2つ目の引数がそれを利用した関数
    • だいたい前回学んだrunletと同じ気がする
    • 実験したところ、runlet同様、withも最終行で返り値を定義できる
class Configuration(var host: String, var port: Int) 

fun main() {
    val configuration = Configuration(host = "127.0.0.1", port = 9000) 

    var res = with(configuration) {
        host
    }
    println(res) // 127.0.0.1
}
    • nullableな値をwithで利用できないか、と思ったがうまくいかなかった
    • そうすると、nullableな値を扱えるrunでいいじゃんと思ってしまう。どう違うんだろう。
  • apply
    • これはフィールドの初期化とかで使うらしい
    • ためしにwithで初期化したら、実行できた。どう使い分ければいいんだ……applyの場合戻り値がオブジェクトだから、そのまま他の処理にメソッドチェーン的につなげたい場合とかだろうか。
class Configuration(var host: String, var port: Int) 

fun main() {
    val configuration = Configuration(host = "127.0.0.1", port = 9000) 

    with(configuration) {
        port = "9001"
    }
    println("${configuration.port}") // 9001
}

 

[まとめ]

今回も、各節の最後に「やったー!」を実施できた。

次回も引き続きScope Functionsを学んでいくぞ!