Menu
CoddyTech

anyとall

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

any()とall()は、配列全体について「はい」か「いいえ」で答える質問をします。どちらも、1つの要素に対してtrueまたはfalseを返す関数を受け取ります。

  • any()は、少なくとも1つの要素に対して関数がtrueを返す場合、trueを返します。
  • all()は、すべての要素に対して関数がtrueを返す場合、trueを返します。
var enemy_hp = [30, 0, 12]
print(enemy_hp.any(func(hp): return hp == 0))
print(enemy_hp.all(func(hp): return hp > 0))
true
false

1体の敵のHPが0なので、any()はtrueとなり、同じ敵によってall()はfalseになります。

どちらも答えが分かった時点ですぐに停止します。any()は最初のtrueで、all()は最初のfalseで停止します。numbers.all(is_even)のように、名前付き関数でも使えます。

空の配列では、どの要素も条件を満たさないためany()はfalseを返し、どの要素も条件に失敗しないためall()はtrueを返します。

フラグ変数を使ったループの代わりに、条件式で使用します:

var inventory = ["sword", "key", "rope"]
if inventory.any(func(item): return item == "key"):
	print("The door opens")
challenge icon

チャレンジ

簡単

プログラムはカンマ区切りのスコアを1行読み込み、配列 numbers に格納します。この部分はすでに記述されています。

次の2行を出力します。

  1. Any perfect: に続けて、少なくとも1つのスコアが 100 なら true、そうでなければ false
  2. All passed: に続けて、すべてのスコアが 50 以上なら true、そうでなければ false

1行目には any() を、2行目には all() を使用します。入力が 100,75,40 の場合、出力は次のとおりです。

Any perfect: true
All passed: false

自分で試してみよう

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# any() と all() を使って2行を出力する
quiz icon腕試し

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

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

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