今週は第12回を開催しました。
前回の様子はコチラ↓
[第12回の様子]
2020/04/22に第12回を開催した。
参加メンバーは自分を含めて6人(だったはず)。引き続き、みんな在宅勤務中なので、それぞれオンラインミーティングルームに参加する形式で実施した。
ドライバーは2周目に突入したので、自分がドライバーをやろうとしたが、MacBookの仕事用アカウント作成時に画面共有できない設定にしてしまっていたため断念。そしてなんと、実はドライバー未経験だったメンバーがいたので、今回はドライバーをお願いすることに。
内容としては、Learn Kotlin by Exampleの第5章 Collectionsのfilter、map、any, all, none、find, findLast、first, lastを進めた。ひとつひとつの内容が比較的軽かったので、いつもよりハイペースで進められている。
今回は以前利用したケモいVRアバターで参加したところ、リアルな狼アバターや猫の親子のWebカメラ映像のメンバーもいて、なんだか動物園みたいだった。
コロナ禍真っ最中というご時世なので、ペストマスクにハット姿のコスプレで参加してくれたメンバーもいた(しゃべるとマスクが曇るという欠点があり、早々に脱いでいたけど)。
今週は途中までLearn Kotlin by Exampleのサイト上でコードが実行できていたのだが、途中で動かなくなってしまった。その際、今回はpaiza.ioのかわりにideone.comを利用した。Brainf**kも動かせるスグレモノである(Kotlinのコンパイル、実行はやや遅かったが……)。
[学んだことや疑問点]
- filter
- なんてことはないフィルタ。想像どおり。
- Javaとちがって
.stream()を呼ばなくてもいいのは楽そう - あとで聞いたところ、
- ()省略してのLambda式にも慣れたし、引数が1つの場合のit利用にも慣れた。
- map
- 要素を別のデータに変換するのがmap
- もとのコレクションと同じ型でなくてもよいし、
nullに変換することもできる
val numbers = listOf(1, -2, 3)
val nulls = numbers.map { null }
val strings = numbers.map { "str $it" }
println("Numbers: $numbers") // Numbers: [1, -2, 3]
println("Nulls: $nulls") // Nulls: [null, null, null]
println("Strings: $strings") // Strings: [str 1, str -2, str 3]
- map後immutableなlistになる
- 別のコレクションに入れる場合は、
list.mapTo(dst) { it }のような形で変換先を指定できる - any, all, none
any()は与えられた関数に合致するデータが1つでもある場合にtrueを返すall()は与えられた関数に全てのデータが合致する場合にtrueを返すnone()は与えられた関数に合致するデータが1つもない場合にtrueを返す- ぱっとつかいどころが思いつかなかったけれど、便利そう
- find, findLast
- コレクションから目的の要素を探す関数
- 条件に合致する要素がない場合は
nullが返る hoge?.let { ... } ?: ...という謎の構文が隠れていたnullを避けるためにこういう書き方ができるらしい- first, last
- Lambda式を渡さず
first(),last()で最初または最後の要素を取得できる - Lambda式を渡すと条件に合致する最初または最後の要素を取得できる
emptyListOf()で空のリストを作成できる- 空のリストに
first()を呼ぶとjava.util.NoSuchElementException: List is empty.と例外が発生する - この場合は
firstOrNull()を呼ぶと例外が発生せず、nullを返してくれる lastOrNull()ももちろんある
[まとめ]
今回は、たくさん進めることができたので、最後に「やったー!」を実施した。やったー!
来週もひたすらCollectionの続きをやるぞ!