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

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

 

前回の様子はコチラ↓ 

kdnakt.hatenablog.com

 

 

[第24回の様子]

2020/07/29に第24回を開催した。

 

参加メンバーは自分の他に4人で、総勢5名。前回2人だったので、前回比2.5倍の人数が集まったことになる。すごい!ドライバー役選びたい放題!!

 

勉強会本編の内容としては、練習問題集Kotlin Koansの第2章 Conventionsの前半、ComparisonからRange toまでの3問を完了し、画面上での進捗は38%となった。前回比+8%。だんだん問題が難しくなってきたのか、スピードが落ちている気がする。まあ勉強会のネタを用意する時間的余裕がありそうだということで……。

今回はJavaで書かれたプログラムのリライト問題というよりは、JavaにはないKotlin独自の概念に関する部分が多かった。

最後に4問目のFor loopの問題に取り組もうとしたのだが、残り時間2分では解き切れなかった。残念。

 

[学んだことや疑問点]

  • Comparison
    • 前回の勉強会実装したComparatorの仲間のComparableインターフェースを実装する問題
    • ドライバーは以下のようにMyDateをIntに変換して実装していて、なるほどと思った。
override fun compareTo(other: MyDate): Int {
  return ((this.year * 10000 + this.month * 100 + this.dayOfMonth)
    - (other.year * 10000 + other.month * 100 + other.dayOfMonth))
}
    • 模範回答はwhen式を利用した形で、なるほどこういう書き方もあるのかと勉強になった
  • In range
    • in演算子を使って、 hoge in HogeRangeというコードを書きたい場合はHogeRangeクラスにcontains関数を実装すればよいらしい。なるほど。
    • 単にfun contains(d: HogeClass): Booleanとやってしまうとコンパイルエラーになる。演算子に対応した関数であることを明示するためにoperator修飾子を先頭に付与する必要があった。
  • Range to
    • in演算子の後半でx..yという形で範囲を指定するために、ClosedRange<HogeClass>インターフェースを実装するやり方が紹介されていた
    • ClosedRangeを実装した上で、さらにrangeTo()関数を実装すると範囲指定ができるようになる。なるほど。
operator fun MyDate.rangeTo(other: MyDate) = DateRange(this, other)

class DateRange(override val start: MyDate, override val endInclusive: MyDate): ClosedRange<MyDate>

fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
    return date in first..last
}

 

[まとめ]

今回も引き続き練習問題集Kotlin Koansを進めた。問題自体は解けたからいいんだけど、ちゃんと理解できてるのかやや不安が残る……とりあえずoperator修飾子は完全に理解した(してない)。

来週もやっていくぞ!