Kotlin
Kotlinのループ
サーチ…
備考
Kotlinでは、ループは可能な限り最適化されたループにコンパイルされます。たとえば、数値範囲を反復処理する場合、オブジェクト作成のオーバーヘッドを避けるために、バイトコードは単純なint値に基づいて対応するループにコンパイルされます。
アクションをx回繰り返します。
repeat(10) { i ->
println("This line will be printed 10 times")
println("We are on the ${i + 1}. loop iteration")
}
iterablesをループする
標準のfor-loopを使用して、任意の反復可能関数をループすることができます。
val list = listOf("Hello", "World", "!")
for(str in list) {
print(str)
}
Kotlinの多くのものは、数値範囲のように繰り返し可能です:
for(i in 0..9) {
print(i)
}
イテレーション中にインデックスが必要な場合:
for((index, element) in iterable.withIndex()) {
print("$element at index $index")
}
forEach関数を使用して、明示的な言語構造を持たずに、標準ライブラリに含まれる反復処理への機能的なアプローチもあります。
iterable.forEach {
print(it.toString())
}
it
、この例では、暗黙的に参照、現在の要素を保持しているラムダ関数を
Whileループ
whileループとdo-whileループは他の言語と同じように動作します。
while(condition) {
doSomething()
}
do {
doSomething()
} while (condition)
do-whileループでは、条件ブロックはループ本体で宣言された値と変数にアクセスできます。
中断して続行する
他の言語と同じように、キーワードを分割して続行できます。
while(true) {
if(condition1) {
continue // Will immediately start the next iteration, without executing the rest of the loop body
}
if(condition2) {
break // Will exit the loop completely
}
}
ネストされたループがある場合は、ループステートメントにラベルを付け、breakステートメントとcontinueステートメントを修飾して、どのループを継続または中断したいかを指定できます。
outer@ for(i in 0..10) {
inner@ for(j in 0..10) {
break // Will break the inner loop
break@inner // Will break the inner loop
break@outer // Will break the outer loop
}
}
しかし、このアプローチは機能的なforEach
コンストラクトでは機能しません。
kotlinで地図を反復する
//iterates over a map, getting the key and value at once
var map = hashMapOf(1 to "foo", 2 to "bar", 3 to "baz")
for ((key, value) in map) {
println("Map[$key] = $value")
}
再帰
ほとんどのプログラミング言語のように、Kotlinでは再帰を介したループも可能です。
fun factorial(n: Long): Long = if (n == 0) 1 else n * factorial(n - 1)
println(factorial(10)) // 3628800
上記の例では、 factorial
関数は、指定された条件が満たされるまで繰り返し呼び出されます。
反復のための機能的構成
Kotlin標準ライブラリには、コレクションを繰り返し処理するための多数の便利な機能もあります。
たとえば、 map
関数を使用してアイテムのリストを変換することができます。
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.map { "Number $it" }
このスタイルの多くの利点の1つは、同様の方法で操作を連鎖させることです。もし偶数のために上記のリストをフィルタリングする必要があったとすれば、ほんの少しの変更しか必要ではありません。 filter
機能を使用することができます。
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
val numberStrings = numbers.filter { it % 2 == 0 }.map { "Number $it" }