ガード節
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つの要素に対するガードとして機能します。無効な要素をスキップし、ループは次の要素に進みます。
チャレンジ
簡単関数 process_data を書いてください。文字列 text を受け取り、文字列を返します。
textが整数でない場合は、Input must be a number!を返します- 数値が
0の場合は、Cannot divide by zero!を返します - それ以外の場合は、
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
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ