今週は第17回を開催しました。
前回の様子はコチラ↓
[第17回の様子]
2020/06/10に第17回を開催した。
参加メンバーは自分を含めて4人。引き続き、みんな在宅勤務中なので、それぞれオンラインミーティングルームに参加する形式で実施。今日も自分はVR参加はせず、自粛期間中に伸びきった冬毛のまま素顔で参加。
勉強会本編の内容としては、Learn Kotlin by Exampleの第6章 Scope Functionnsのwith
、apply
の2節を進めた。
今回はすべての動作確認をLearn Kotlin by Exampleのサイト上で実行できた。
[学んだことや疑問点]
- with
- withは二つの引数をとる
- 最初の引数が
this
扱いしたいオブジェクトで、2つ目の引数がそれを利用した関数 - だいたい前回学んだ
run
やlet
と同じ気がする - 実験したところ、
run
やlet
同様、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を学んでいくぞ!