Menu
CoddyTech

ガード節

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 68/78。

関数で複数のチェックが必要な場合、あるifの中に別のifをネストすると、本来の処理がどんどん深くなっていきます。

func buy(gold: int, price: int) -> String:
	if price > 0:
		if gold >= price:
			return "Bought! %d gold left" % (gold - price)
		else:
			return "Not enough gold"
	else:
		return "Invalid price"

ガード節はこれを逆転させます。関数の先頭で無効なケースを1つ確認し、returnですぐに終了します。ガード節の後のコードは有効な値の場合にのみ実行され、ネストは必要ありません:

func buy(gold: int, price: int) -> String:
	if price <= 0:
		return "Invalid price"
	if gold < price:
		return "Not enough gold"
	return "Bought! %d gold left" % (gold - price)

buy(50, 30)はBought! 20 gold leftを返し、buy(10, 30)はNot enough goldを返し、buy(50, 0)はInvalid priceを返します。

ガードの順序は重要です。行を保護するガードは、その行より前に置く必要があります。数値を使う前にis_valid_int()でテキストを確認し、除算する前にゼロでないことを確認してください。

func share(coins: int, players: int) -> int:
	if players <= 0:
		return 0
	return coins / players

-> void関数では、ガードは単独のreturnです。ループ内では、continueは1つの要素に対するガードとして機能します。無効な要素をスキップし、ループは次の要素に進みます。

challenge icon

チャレンジ

簡単

関数 process_data を書いてください。文字列 text を受け取り、文字列を返します。

  1. text が整数でない場合は、Input must be a number! を返します
  2. 数値が 0 の場合は、Cannot divide by zero! を返します
  3. それ以外の場合は、100.0 を数値で割り、小数点以下2桁で結果を返します

たとえば、process_data("8") は 12.50 を返し、process_data("-5") は -20.00 を返し、process_data("abc") は Input must be a number! を返します。

2つのチェックは、関数の先頭にガード節として書いてください。

自分で試してみよう

func process_data(text: String):
	# ここにコードを書いてください
	pass
quiz icon腕試し

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

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

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