kdnakt blog

hello there.

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

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

 

前回の様子はコチラ↓ 

kdnakt.hatenablog.com

 

 

[第27回の様子]

2020/08/20に第27回を開催した。

 

諸事情により水曜日に開催できなかったので木曜日開催だった。

参加メンバーは自分をいれて6名!今回は前回からさらに2名増えた。しかも初参加のメンバーが1人。ありがてえ……😭

そもそもこんなに人数が集まったのは2月か3月以来な気もする。あれ、木曜日開催のほうがいいんだろうか......。とりあえず次回は再び水曜日に開催予定。

人数が多いなか、今回はバ美肉氏がドライバーを務め、圧倒的な進捗を見せた。

 

勉強会本編の内容としては、練習問題集Kotlin Koansの第3章 Collectionsをざくざくと進めた。IntroductionからGroupByまで。進捗は68%となり、前回比+20%。今週は進捗がいい意味でヤバい。

 

[学んだことや疑問点]

  • Introduction
    • 先週までは難しかったので、今週はどんな問題だろうとドキドキ
    • CollectionはtoXXX()メソッドでXXXコレクションに変換できる。便利。
    • ふと疑問に思ったが、拡張関数はあくまでクラスに実装されているので、クラス内のプロパティにもthis無しでアクセスできる。もちろんあっても良い。
data class Shop(val customers: List<Customer>)
fun Shop.getSetOfCustomersWithoutThis(): Set<Customer> = customers.toSet() // thisなし
fun Shop.getSetOfCustomersWithThis(): Set<Customer> = this.customers.toSet() // thisあり
  • Filter map
    • filter()map()のおさらい
    • ここではit.city == cityと書いてequals ()でないことに疑問をもった参加者がいたが、dataクラスなのでequals()が自動生成されている
  • All, Any and other predicates
    • all()any()count()find()が登場した
    • 特に見るべきところもなくさくっと終了
  • FlatMap
    • flatMap()の復習。今回の課題ではこのflatMapを多用したが、普段の開発ではあまり使わないとの声も。なるほど。
    • 最初は模範回答と違う形の回答だったのだが、「これ簡単にできそう」とドライバー氏が模範回答にたどり着いた 。すげえ。
data class Customer(val name: String, val orders: List<Order>)
data class Order(val products: List<Product>)

val Customer.orderedProducts: Set<Product> get() {
    return orders.flatMap { it.products }.toSet()
}

// 最初の回答
val Shop.allOrderedProducts: Set<Product> get() {
    return customers.flatMap { it.orders.flatMap { it.products } }.toSet()
}

// 模範回答
val Shop.allOrderedProducts: Set<Product> get() {
    return customers.flatMap { it.orderedProducts }.toSet()
}
  • Max min
    • プロパティを指定して最大最小を取得する場合はmaxBy(), minBy()を使えとの説明が。
    • しかし実際にオンラインエディタでmaxBy()を使って実装すると警告が表示された
    • maxBy()は非推奨なのでmaxByOrNull()を使え、ということらしい。勉強になる。
    • 模範回答はmaxBy()のままだったのが多少気がかり。いいのかKoans。

f:id:kidani_a:20200821021254p:plain

  • Sort
    • sortedBy()を使ってさくっと実装。以上。
  • Sum
    • Int型の場合はsumBy()で合計を計算できるが、Double型の場合はsumByDouble()を使わなければいけないらしい。オーバーロードされたメソッドがないんだろうか……謎。
    • 課題の注意点としてコメントがつけられている「the same product」云々のくだりも謎だったのだが、こちらはSetを利用すると正しく金額を合計できないから利用しないように、ということだったのではと解説されて納得。
  • Group By
    • groupBy()を使ってさくっと実装。以上。

 

[まとめ]

今回も引き続き練習問題集Kotlin Koansを進めた。今回は3回どころではなく大量の「やったー!」を実施できた!(新メンバー参加時を含めて)

来週も引き続き第3章をやっていくぞ!