キャプチャされた変数
CoddyのKotlinジャーニー「ロジックとフロー」セクションの一部。レッスン 29/63。
ラムダは周囲のスコープにある変数を使用できます。これをキャプチャと呼びます。キャプチャされた var が変更されると、後で呼び出したときにその現在の値が確認されます。キャプチャを使うと、返されたラムダが呼び出しの間で状態を保持することもできます。
main 内:
var offset = 2
val addOffset = { n: Int -> n + offset }
offset = 5
println(addOffset(3))ラムダは呼び出されたとき、現在の offset である 5 を読み取ります。
捕捉された可変変数は、元の値の固定されたコピーではなく、共有状態です。
チャレンジ
中級パラメーター value: Int、offset: Int を指定して capturedOffset を完成させてください。周囲の offset を整数の引数に加算するラムダを作成し、それを value に適用してください。
上記でより厳しい境界が指定されていない限り、コレクションは各レベルで最大 100 個の要素を含み、整数の引数および整数コレクションの値は -1000 から 1000 の範囲です。解析対象のテキストには、説明されているように無効な表現や範囲外の表現が含まれる場合があります。
型 Int の値を返してください。提供されている入力/出力コードはそのまま使用してください。これはスカラー引数を 1 行に 1 つずつ読み取ります。リストは要素数の後に要素が続き、マップはエントリ数の後に各キーと値が続きます。ネストされたリストでは、各行について要素数と要素の形式が繰り返されます。提供されている main は、戻り値の後に改行を 1 つ出力します。リストには Kotlin の標準的な角括弧形式を使用し、追加のラベルは出力しないでください。
自分で試してみよう
fun capturedOffset(value: Int, offset: Int): Int {
// ここに解答を書いてください。
return 0
}
fun main() {
val value = readln().toInt()
val offset = readln().toInt()
println(capturedOffset(value, offset))
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Kotlinプレイグラウンド