プログラム書くの遅い人、 仕様が整理できてないか、 IDE を使い慣れてないか、言語の標準 API を覚えてないかのいずれかなので、勉強し直してきてください
— 引きこもり持田 (@mike_neck) 2020年12月26日
Kotlin を使ったプログラムを書く場合には以下の要素によってプログラムを書く速さが決まってくる
プログラムを書くのが遅い場合、これらのどれかが欠けている
IDE の操作・Kotlin の知識については定型的なトレーニングによる改善を目的に作られているのが Kata である
Kotlin の Kata については、 JetBrains が Kotlin Koans という学習目的用のマテリアルを提供しているが、入門的な内容でり、中級者になりたい人向けにマテリアルがあってもいいと思っていた
そこで Eclipse Collections Kata のマテリアルをほぼそのまま流用して Kotlin のコレクション API のトレーニングをするマテリアルを作ってみた
先程書いたとおり、 Eclipse Collections Kata の内容をそのまま使っているので、簡単すぎず難しすぎずくらいの内容で、そこそこのボリュームの問題を JUnit のテストを通していくことで学習していく内容になっている
README にも書いた内容だが、やり方は以下の通り
- Release のページから最新のリリースのコードをダウンロードして、解凍する
- 解凍してできたディレクトリーを Gradle(マルチプロジェクト) に対応している IDE で取り込む
- pet-kata/company-kata の Exercise1 〜 を問題の指示に従い解いてテストを通す
- 定期的に課題をやる
例えば、 pet-kata の Exercise1
の最初の問題は次のようなテストコードになっている
@Test fun firstNamesOfAllPeople(people: People) { // Replace a block { mutableListOf() }, with a transformation method on Iterable(= people) val firstNames: MutableList<String> = people { mutableListOf() } // people.items... val expectedFirstNames: List<String> = listOf("Mary", "Bob", "Ted", "Jake", "Barry", "Terry", "Harry", "John") firstNames shouldBe expectedFirstNames }
people
に渡されているブロック部分を取り除いて、 people
(Iterable<Person>
) から各 firstName
を取り出して List<String>
に変換する問題である
@Test fun firstNamesOfAllPeople(people: People) { // Replace a block { mutableListOf() }, with a transformation method on Iterable(= people) val firstNames: MutableList<String> = people.map { person -> person.firstNae } val expectedFirstNames: List<String> = listOf("Mary", "Bob", "Ted", "Jake", "Barry", "Terry", "Harry", "John") firstNames shouldBe expectedFirstNames }
このように書き直した後にテストを実行すればよい
もし、 People
の型の定義がわからない、 Person
の定義がわからないなどがある場合は、 pet-model プロジェクトにその定義の書いてあるファイルがあるので、そちらを参照すると良い
また、課題の解き方がわからないなどあったら、下記の URL からドキュメントを読むのが良いと思われる
以上、 Kotlin を雰囲気とかファッションとかで触っている人や、処理したいデータがあるのにいつも操作で手が止まってしまうなどの人は試してもらいたい
また、改善点等があれば気軽に issue または PR を送ってほしい