kdnakt blog

hello there.

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

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

 

前回の様子はコチラ↓ 

kdnakt.hatenablog.com

 

 

[第26回の様子]

2020/08/12に第26回を開催した。

 

参加メンバーは自分をいれて4名。今回は前回の倍のメンバーが集まってワイワイやれた。うれしい😂やはり3人はいないと盛り上がりにイマイチ欠ける気がする。人数が多いとドライバー役も選び放題で良い。

例によってバ美肉で参加してくれているメンバーもいる。26回目ともなるともはや見慣れてしまって新鮮味がないのがアレだが……。

 

勉強会本編の内容としては、練習問題集Kotlin Koansの第2章 Conventionsを、Operators overloadingから章の最後のInvokeまで進めて、第2章はこれで完了となった。進捗は48%となり、前回比+8%。

 

[学んだことや疑問点]

  • Operators overloading
    • 先週考えていたwhen式は全然関係なかった
    • ドライバ役の人が、事前に問題の解答を考えてきたらしく、task1だけ実装するとこうで……task2を実装するにはこういうクラスが必要で……と淡々と説明してくれて、なるほど!となった。先週は無駄に複雑に考えていた気がする。
    • +演算子.plus()拡張関数を実装することで数値型以外でも利用できるようになる
    • 同様に*演算子.times()拡張関数を実装すればよい
  • Destructuring declarations
    • 勉強会第21回で学んだ分解宣言的なやつ(いまだに日本語訳が覚えられない)
    • dataクラスにすると分解宣言が利用できる、というのをすっかり忘れていたのでよい復習になった
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int)
val (year, month, dayOfMonth) = MyDate(2000,12,31)
println("${year}年${month}月${dayOfMonth}日")
// 2000年12月31日
  • Invoke
    • いきなりprivate setという謎の記法が出てきて戸惑う
    • どうやら、直前の行のプロパティのsetterをプライベートにする機能があるようだ
    • ためしにprivate getと書き換えてみたら、getterの可視性はプロパティの可視性を一致すべし、というコンパイルエラーが出た(Getter visibility must be the same as property visibility)

 f:id:kidani_a:20200812222301p:plain

    • かつ、プロパティの可視性をprivateに変更すると、可視性の修飾子が冗長であるという警告が表示された(Visibility modifiers are redundant in getter)。なるほど……。

f:id:kidani_a:20200812222459p:plain

    • メインの学習内容としては、invoke()という拡張関数を実装すると、オブジェクトに()をつけてinvoke()を呼び出せるようになるが、乱用してはいけない、ということらしい。使い道があまり思いつかない……
class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) {
    operator fun invoke():Unit {
        println("${this.year}/${this.month}/${this.dayOfMonth}")
    }
}

fun main() {
    MyDate(2000,12,31)()
    // 2000/12/31
}

 

[まとめ]

今回も引き続き練習問題集Kotlin Koansを進めた。今回は3回「やったー!」を実施できた!

来週から第3章をやっていくぞ!