kdnakt blog

hello there.

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

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

 

前回の様子はコチラ↓ 

kdnakt.hatenablog.com

 

 

[第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らしい書き方とか理解は深まったのでヨシ!

来週もやっていくぞ!