ラムダ関数 パート2
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 55/78。
1 行のラムダは、三項演算子を使って結果を選べます。value_if_true if condition else value_if_false:
var check_age = func(age): return "Adult" if age >= 18 else "Minor"
print(check_age.call(20)) # Adult3つ以上のケースがある場合は、elseの後に2つ目の三項演算子を連結するか、ifとelifを使ってラムダをブロックとして記述します:
var grade = func(score):
if score == 100:
return "Perfect"
elif score >= 60:
return "Pass"
return "Fail"
print(grade.call(75)) # Passラムダは値なので、関数に渡すことができます。パラメーターの型をCallableとして宣言し、call()で実行します。
func apply_twice(fn: Callable, value):
return fn.call(fn.call(value))print(apply_twice(func(n): return n + 3, 1)) # 7名前付き関数も同じ方法で渡せます。apply_twice(double, 5)のように、括弧を付けずに関数名を書きます。
組み込みメソッドも関数を受け取ります。sort_custom()は、2つの要素を受け取り、1つ目の要素を先に置く必要がある場合にtrueを返すラムダを使って配列を並べ替えます。
var scores = [40, 90, 75]
scores.sort_custom(func(a, b): return a > b)
print(scores) # [90, 75, 40]ラムダは周囲のローカル変数を読み取れますが、作成時にその値をコピーします。そのような変数をあとで変更してもラムダには反映されず、ラムダ内でその変数に代入しても外部の変数は変わりません。
チャレンジ
簡単プログラムは整数を読み込みます。ラムダを作成し、categorize_numberという名前の変数に格納します。ラムダは1つの数値を受け取り、次の値を返します。
- 数値が
0より大きい場合はPositive - 数値が
0の場合はZero - 数値が
0より小さい場合はNegative
読み込んだ数値を渡して呼び出し、結果を出力します。入力が10の場合、出力は次のとおりです。
Positive自分で試してみよう
extends Node
func _ready():
var number := int(OS.read_string_from_stdin())
# ここでラムダ categorize_number を作成する
# number を渡して呼び出し、結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ