最近、プロジェクトを書いているときに、 kotlin がループから抜け出すという問題が発生しました。プロジェクトの都合上、次の簡単な例をデモとして取り上げます。
1. 質問
まず、ループから抜け出す通常の関数を見てみましょう。誰もが知っているので、コードだけを掲載します。
val list = listOf(1, 2, 3, 4, 5)
for (num in list) {
if (count == 3) {
break // 退出循环
}
// 打印 1和2
println(num)
}
実際の開発ではlist.forEach関数を使用しました。
// label@标签
list.forEach label@{
if (it == 3) {
// 在这里return之后,实际上并没有跳出循环
return@label
}
// 打印 1 2 4 5
println("label:$it")
}
上の例では、return@label を呼び出した後、ループは実際には抜け出していません。ここで必要なのは、値が 3 のときにループを抜け出し、1、2 を出力し、実際には 1、2、4、5 を出力することです。 、続けてください。同じです
for (i in list) {
if (i == 3) {
continue
}
println("continue:$i")
}
では、なぜ forEach 関数を使用してループを抜け出すことができないのでしょうか?
forEach
は、ラムダ式を引数として受け取り、それをコレクション内の各要素に適用する高階関数です。forEach
コレクション内の各要素を走査するだけなので、値は返されません。
最後に、list.forEach と for ループの違いについて説明します。
-
構文構造は異なります。
list.forEach
これは、ラムダ式をパラメータとして受け取る高階関数です。代わりに、キーワードをfor (num in list)
使用してコレクション内の要素を走査する反復子ベースの構文構造です。in
-
戻り値は異なります。
list.forEach
戻り値はなく、ラムダ式をコレクション内の各要素に適用するだけです。for (num in list)
走査中に各要素を返します。この戻り値を使用して他の操作を行うことができます。 -
読みやすさの違い:
list.forEach
構文構造がより簡潔になり、特にコレクションに対する単純な操作に適しています。の構文構造for (num in list)
はより柔軟であり、任意の論理処理を記述することができます。
2. 結論
- コレクション内の要素を単純に反復するには、次を使用します。
list.forEach
- コレクションを走査して複雑なロジック処理を行う場合、または走査された要素を返す必要がある場合に使用します。
for (num in list)