変数とのマッチ
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 6/78。
Match Statementのレッスンでは、すべてのパターンが1:や"bow":のようなリテラル値でした。パターンには定数や変数も使えます。matchは、その行が実行されるときに、その名前が保持している値と値を比較します。
const SECRET := 42
var guess := 42
match guess:
SECRET:
print("You found it!")
_:
print("Try again")You found it!2つ目の新しいパターンはバインディングパターンです。varの後に新しい名前を続けます。_と同様に、任意の値に一致し、その値を新しい変数に格納します。この変数はブロック内で使用できます。
var level := 5
match level:
1:
print("Tutorial")
var n:
print("Level %d is locked" % n)Level 5 is locked束縛パターンは、独自の名前を持たない式の結果に照合するときに最も役立ちます。
var roll_a := 4
var roll_b := 6
match roll_a + roll_b:
12:
print("Double six!")
var total:
print("You rolled ", total)You rolled 10バインディングパターンはすべてに一致するため、_のように最後に置きます。名前は新しいものでなければなりません。2つ目の例のvar level:は、levelがすでに存在するためエラーになります。また、カンマで区切られた他のパターンと同じ行に置くこともできません。
matchは型を厳密に比較します。文字列"5"はパターン5に一致せず、浮動小数点数の5.0も一致しません。入力から読み取ったテキストは、数値と照合する前にint()で変換してください。
チャレンジ
簡単数当てチェックを書きましょう。定数 SECRET には秘密の数が格納され、プログラムはプレイヤーの予想を整数として guess に読み込みます。
guess に対する match 文を、次の3つのパターンで書きましょう。
- 定数
SECRET:Correct!を出力する 0:You gave up.を出力する- その他の予想に対するバインディングパターン: 予想した数に
is not the number.を続けて出力する
入力が 17 の場合、出力は次のとおりです。
17 is not the number.自分で試してみよう
extends Node
func _ready():
const SECRET := 42
var guess := int(OS.read_string_from_stdin())
# 下にmatch文を書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ