はじめに
公式の問題集「Kotlin Koans」を解きながらKotlinを学習します。
過去記事はこちら
- 第0回:Kotlin Koansについて
- 第1回:Simple Functions
- 第2回:Named arguments
- 第3回:Default arguments
- 第4回:Triple-quoted strings
- 第5回:String templates
- 第6回:Nullable types
- 第7回:Nothing type
問題
コレクションに偶数が含まれているかどうかをチェックするために、any関数にラムダを渡します。any関数は少なくとも1つの要素が指定した条件を満たした場合にtrueを返します。
修正前のコード
fun containsEven(collection: Collection<Int>): Boolean =
collection.any { TODO() }
問題のポイント
Kotlinは関数型プログラミングをサポートしています。Kotlinのラムダについて学びます。
ラムダ式の概要
- ラムダ式は、常に中括弧で囲まれています
- パラメータがもしあれば -> の前で宣言されます(パラメータの型を省略してもかまいません)
- 本体が -> に続きます(存在する場合)
- パラメータを1つだけ持つ場合、その宣言を( -> と一緒に)省略できます。その場合の変数名は、 it になります。
解答例
ラムダ式を省略しない形式で解答してみます。
ラムダ式は常に中括弧で囲まれ、完全な構文形式のパラメータ宣言はカッコ内にあり、型注釈を持つことができ、本体(今回だとBooleanを返す処理)は -> 記号の後に置かれます。
fun containsEven(collection: Collection<Int>): Boolean =
collection.any { i: Int -> i % 2 == 0 }
次は省略できるところはする形式で解答してみます。パラメータを1つだけ持つ場合、その宣言を( -> と一緒に)省略できます。その場合の変数名は、 it になります。
fun containsEven(collection: Collection<Int>): Boolean =
collection.any { it % 2 == 0 }