Menu
CoddyTech

変数とのマッチ

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()で変換してください。

challenge icon

チャレンジ

簡単

数当てチェックを書きましょう。定数 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文を書いてください
quiz icon腕試し

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

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

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