今週は第25回を開催しました。
前回の様子はコチラ↓
[第25回の様子]
2020/08/05に第25回を開催した。
参加メンバーは自分ともう1人で、合計2名。前々回同様2人きり……前々回とはまた別の組み合わせだけど。
しかも開始10分くらいは誰も集まらなかったので、1人で黙々と問題を解いていたという……悲しい。負けないぞ😭
勉強会本編の内容としては、練習問題集Kotlin Koansの第2章 Conventionsを進めた。For loop
を解いて、次の問題のOperators overloading
に取り組もうとしたが敢えなく時間切れとなってしまった。進捗は40%となり、前回比+2%。
[学んだことや疑問点]
- For loop
- DateRangeクラスが与えられて、Iterable<MyDate>を実装しろ、という問題
- DateRangeクラスの親をIterable<MyDate>にして、コンパイルエラーのメッセージを参考にiterator(): Iterator<MyDate>関数を宣言
- Iteratorインターフェースを実装したDateIteratorクラスを作ることに
- Iteratorインターフェースの実装例を参考にhasNext()とnext()を実装していった
- next()を最初次のように実装してしまい、ずっと開始日の翌日のデータが取得されるハメに。
override fun next(): MyDate { return start.nextDay() } // 正しくはこう var current = start override fun next(): MyDate { val res = current current = current.nextDay() return res }
- あと、上記の間違いの例のときのような、return1行で済むケースではなるべくKotlinぽく
fun next() = start.nextDay()
の形式で実装できるようにしたい(今回の場合これは間違いだが…… - hasNext()も自力で以下のように実装したのだが、判定が逆になってしまっていたため無限ループが発生しのか、テスト結果が帰ってこず「Evaluation stopped while it's taking too long」というエラーメッセージが表示されてしまった
override fun hasNext() = current.compareTo(end) >= 0 // Evaluation stopped while it's taking too long // ただしくは以下 override fun hasNext() = current.compareTo(end) <= 0 // サイトの模範解答的にはこう。なるほど! override fun hasNext() = current <= end
- 何が悪くて「Evaluation stopped while it's taking too long」となっているわからなかったので、今回は残念ながらあと一歩のところで模範解答を参照することに。無念……。
- Operators overloading
- 問題文を読んでなんとなくやることを理解するところまでで、あまり手は動かせず。
- たぶん、Enumの値をwhen式で判定して
MyDate.addTimeIntervals()
を呼び出すとかすればいいはず…… - 時間切れでここまで。来週は続きから。
[まとめ]
今回も引き続き練習問題集Kotlin Koansを進めた。残念ながら自力で100%正解には至らなかったが……それでもKotlinらしい書き方とか理解は深まったのでヨシ!
来週もやっていくぞ!