今週は第27回を開催しました。
前回の様子はコチラ↓
[第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。
- Sort
sortedBy()
を使ってさくっと実装。以上。- Sum
- Int型の場合は
sumBy()
で合計を計算できるが、Double型の場合はsumByDouble()
を使わなければいけないらしい。オーバーロードされたメソッドがないんだろうか……謎。 - 課題の注意点としてコメントがつけられている「the same product」云々のくだりも謎だったのだが、こちらは
Set
を利用すると正しく金額を合計できないから利用しないように、ということだったのではと解説されて納得。 - Group By
groupBy()
を使ってさくっと実装。以上。
[まとめ]
今回も引き続き練習問題集Kotlin Koansを進めた。今回は3回どころではなく大量の「やったー!」を実施できた!(新メンバー参加時を含めて)
来週も引き続き第3章をやっていくぞ!