Menu
CoddyTech

ラムダ関数 パート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)) # Adult

3つ以上のケースがある場合は、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]

ラムダは周囲のローカル変数を読み取れますが、作成時にその値をコピーします。そのような変数をあとで変更してもラムダには反映されず、ラムダ内でその変数に代入しても外部の変数は変わりません。

challenge icon

チャレンジ

簡単

プログラムは整数を読み込みます。ラムダを作成し、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 を渡して呼び出し、結果を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ