今週は第51回を開催しました!
引き続きKotlin Hands-onをすすめています。
前回の様子はコチラ↓
[第51回の様子]
2021/2/10に第51回を開催した。
参加メンバーは自分をいれて3名。
前回のつづきの内容があったので、自分が連続してドライバーを担当した。
勉強会本編の内容としては、前回に続いてIntroduction to Coroutines and Channelsハンズオンを進めた。第2章の最後の部分を読んで、第3章の演習問題のタスクを1つ実施した。
[学んだことや疑問点]
- Introduction to Coroutines and Channels: 2. Blocking request
- 前回やったタスクの解答を見ていく
- 自分たちの書いたコードは以下のようになっていた
fun List<User>.aggregate() = this.groupBy { it.login } .mapValues { it.value.sumBy { user -> user.contributions } } .toList() .map { User(it.first, it.second) } .sortedByDescending { it.contributions }
- 模範解答として掲載されていたコードは以下のようになっていた
fun List<User>.aggregate(): List<User> = groupBy { it.login } .map { (login, group) -> User(login, group.sumBy { it.contributions }) } .sortedByDescending { it.contributions }
- 自分の理解が追いつかなかったが、参加者に解説してもらったところによると、自分たちのコードの方が計算量が少なくなっている、らしい。
- 別の解答として
groupBy
ではなく、groupingBy
関数を利用することもできる
groupingBy - Kotlin Programming Language
// groupingBy() の利用例 val words = "one two three four five six seven eight nine ten".split(' ') val frequenciesByFirstChar = words.groupingBy { it.first() }.eachCount() println("Counting first letters:") println(frequenciesByFirstChar) // {o=1, t=3, f=2, s=2, e=1, n=1} val moreWords = "eleven twelve".split(' ') val moreFrequencies = moreWords.groupingBy { it.first() }.eachCountTo(frequenciesByFirstChar.toMutableMap()) println(moreFrequencies) // {o=1, t=4, f=2, s=2, e=2, n=1}
groupingBy
のほうが便利そうに見えるので、覚えておきたい- Introduction to Coroutines and Channels: 3. Using callbacks
fun loadContributorsBackground(service: GitHubService, req: RequestData, updateResults: (List<User>) -> Unit) { thread { loadContributorsBlocking(service, req) } }
loadContributorsBlocking()
の戻り値の型がList<User>
であり、コールバックの引数と同じなので、シンプルにコールバックを利用するように修正する
fun loadContributorsBackground(service: GitHubService, req: RequestData, updateResults: (List<User>) -> Unit) { thread { updateResults(loadContributorsBlocking(service, req)) } }
- 今回は流石に模範解答と一致した。
[まとめ]
モブプログラミング・スタイルで、Introduction to Coroutines and Channelsハンズオンを進めた。
またしても新しいCollection関連の関数groupingBy
を学んだ。Collection奥が深い。
そしてCoroutineいつ出てくるんだ……。
今週の進捗は以下のプルリクエストにまとまっている。