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

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

 

前回の様子はコチラ↓ 

kdnakt.hatenablog.com

 

 

[第23回の様子]

2020/07/22に第23回を開催した。

 

参加メンバーは自分ともう1人で、2人きり。この勉強会始まって以来の少なさ。それでも毎週続けていけばきっとまた人がきてくれるはず……。

勉強会以外であまり話したことのない相手だったのでやや緊張しつつも、今回は私がドライバとなって問題を解いていった。前回のドライバも同じことを言っていたけれど、自分でやるとやはり普段使わない言語なので、意外と覚えていないなと感じた。週一でもいいから継続して、必要なときには自分で調べつつ実装できるようになればと思う。

 

勉強会本編の内容としては、 練習問題集Kotlin Koansの第1章 Introductionの後半、Smart castsからExtensions on collectionsまでの5問を完了し、画面上での進捗は30%となった。前回比+12%。

今回も引き続き、Javaで書かれたコードをKotlinで書き直そう、という内容のものに加えて、Kotlin独自の実装方法や、Javaの標準ライブラリを利用する問題などがあった。

 

[学んだことや疑問点]

  • Smart casts
    • 最近(勉強会第21回)学んだ内容であり、Java 14で導入されたプレビュー機能のパターンマッチングと近い内容だったので、覚えていた
    • TDDっぽく、is Numの分岐を実装してテストが通ることを確認してから、残りを実装した

f:id:kidani_a:20200723102151p:plain

  • Extension functions
    • 拡張関数、勉強会第10回で学んでいたがかなり前の話なので忘れていた。よい復習になった!
    • が、そもそもRationalNumberってなんだっけ?となってしまいぐぐることに(有理数でした)。高校のころは覚えてたけどもう10年以上数学触ってないからな……。このサイトの問題、たまにこういうKotlinの知識とは関係ない部分を要求してきて辛い。
    • Pair<Int, Int>.r(): RationalNumberを実装する際に、this.firstのようにしてプロパティにアクセスしていたが、回答を見てthisを省略できることに気がついた。学び!
  • Object expressions
    • 勉強会第9回で出てきたときは単にオブジェクトを作るやつ、のイメージだったが無名クラスを作るのと同じだと説明があって理解できた(気がする)
    • Comparatorインターフェースを実装する無名クラスを作るわけだから、実装するメソッド名はcompareToだろうと思っていたらcompareだった。Comparableと間違えていた……無念。
    • Comparatorを実装するとき、いつも正負をどう取れば昇順・降順になるのか間違える、という話をしたら(実際今回も最初は昇順に並べてしまった)、参加者からも同意が得られたてちょっと安心(安心してはいけない)。

f:id:kidani_a:20200723103357p:plain

  • SAM conversions
    • SAMってなんだろう、AWSのやつじゃないだろうし……と思っていたらいわゆるラムダ式に繋がる話だった。Single Abstract Methodだそうです。
    • わざわざobject expressionsを利用しなくてももっとシンプルにかける、と言われれば確かにそうだが、1つ前の問題を実装していたときは全く思いつかなかった……プログラマとしての質が知れるorz
    • Kotlinのラムダ式といえばitを利用した引数が1つのものばかり利用していたので、2つの引数をとる関数を実装する経験を積めてよかった!

f:id:kidani_a:20200723103638p:plain

  • Extensions on collections
    • 拡張関数を思い出したこともあって、Listに拡張関数を追加できるぜ!という話だと誤解して、下の画像のような無駄な実装をしてしまった(テストは通ったが)
    • 実際にはListに生えているsortedDescending()メソッドを使ってみよう、というシンプルな問題だったorz 英語力……。

f:id:kidani_a:20200723104145p:plain

 

[まとめ]

今回も引き続き練習問題集Kotlin Koansを進めた。自分で手を動かしたのは初めてだったけど、たくさん正解できた。やったー!

来週もやっていくぞ!