トピック
Thei(ゼイ) telanosansei

IFについて

IF 条件1 AND 条件2 AND 条件3 THEN @AA という条件を指定したいのですが、 これを実行すると@AAに行けません。 ヘルプを見てみると、条件は2つしか設定できないそうですが、 3つ指定したいです。 どうすればいいでしょうか。
0そうだね
プレイ済み
返信[1]
親投稿
oo meidoin21
「条件1も条件2も条件3も同時に満たしている」という表現は&&という記号を用いると良いかと思います。 例 「A==0&&B==0」 Aが0であり、かつBも0である
5そうだね
プレイ済み
返信[2]
親投稿
Thei(ゼイ) telanosansei
できました。 有難うございます!
0そうだね
プレイ済み
返信[3]
親投稿
SquidSky ugomemo_gorohati
でも、IFで使う時は、ANDは英語のそのまま「~と」と覚えるといいでしょうか。 IF A AND B AND C THEN … もし AとBとCが成り立っている なら …
0そうだね
プレイ済み
返信[4]
親投稿
純粋にANDは英語の「〜と」と思っていると間違えることがあるかも…。 ANDはビット演算子なので、比較対象が0か1の場合でないと思ったような動作にならない事があります。&&は論理演算子なので比較対象が0(FALSE)か1以上(TRUE)で判定出来るんで、より「〜と」のイメージに近いと思いますよ。 IF A AND B AND C THEN …の場合、A,B,Cの結果が0か1なら想定通りに動くとは思いますが、結果が0か1にならない場合は注意しましょう。その場合でも&&なら想定通りに動作します。
3そうだね
プレイ済み
返信[5]
親投稿
oo meidoin21
後から調べ直したけど、 論理演算の説明普通に間違ってたorz どうも私が妙な勘違いをしていたみたいです。誤解を招かないように、間違った説明コメントは削除しておきます・・・。
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
IFというのはtrueかfalseだけで判断されています。 これはプチコン3号の場合は値が「0以外」か「0」となります。 IF 3 THEN BEEPは常にBEEPが鳴り、IF 0 THEN BEEPはBEEPが鳴ることはありません。 あとB==16などの比較演算子(「==」や「>」など)を使った論理式というのは条件が成立した時に値が1、不成立の時は値が0となります。 つまり、IF B==16 THEN BEEPはBの値が16の場合はB==16の値が1(true)となるためTHEN以下が実行されるわけです。
2そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
要するに「0以外」か「0」の状態にできれば良いので「AND」「&&」「*」のどれでも複数条件を満たした場合の判断は可能となります。(「OR」「||」「+」も同様) ただし、&&以外のものは比較演算子を使わないと「0以外」か「0」の状態にはできないためANDを使って複数条件のすべてを満たす処理を記述したい場合はIF A>1 AND B==2 THEN BEEPという感じに比較演算子を必ず記述しておけば問題ありません。 ヘルプの実行例もこの形になっているため&&とANDは同様に「かつ」として使えるように記述しているわけです。
2そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
ツララさんへ 「-」を使えばXOR的な使い方もできます。 *、-、+を駆使すれば複雑な条件も簡単に記述できるため私は昔からポケコンでゲームを作る際にはよく使っています。(簡単に記述できるため高速化できる場合もある) 同じものを&&や||といった論理演算子を使って記述するのはかなり大変です。
4そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
あとQSP等の文字数制限プログラムを作りたい場合は*や+の方が&&や||よりも短縮できる場面が多いため活用していますね。 そういう意図がなく普通に「かつ」「または」として動作するプログラムを記述するだけであれば自分が使いやすいものを使うと良いです。 プログラムは思った通りに動けばすべてそれが正解なので「○○を使ったらダメ」というものはありません。(「可読性を上げるならばこちらの記述方法が良い」とかいうものならありだけど)
2そうだね
プレイ済み
返信[10]
親投稿
IF文は「IF 条件 THEN 条件を満たしたら実行する処理」の形式で、もともと条件は1つしか書けないのです。 複数の条件を書く場合はみなさんが書いているとおり、1つずつを条件で書いて、論理演算子でさらに条件を満たすか計算していきます。 かけ算が たし算より優先されて計算されることがあると同じように、 論理演算も優先順位があるので、カッコで囲んで条件の優先順位を明確にしておくと、いろいろとわかりやすかったりします。 カッコありなしでのみやすさの例  IF A==2 && BTN AND #UP THEN @AA  IF ( (A==2) && (BTN AND #UP) ) THEN @AA ちなみに演算子優先順位は公式ページのスペックのところに書かれています
2そうだね
プレイ済み
返信[11]
親投稿
ふだんの足し算の「3+5」は「+」の”演算子”が 3 と 5 を演算して答えを返します。 同じように「A==2」は「==」の”演算子”が A と 2 を演算して答え返します 演算子が「+」の数値演算子なら + の左右の値を足し算して数値の答え返します。 演算子が「==」の比較演算子なら == の左右の値を一致しているか比較して真偽値の答えを返します。 + は数値だけど、== は真偽値(True(真)/False(偽))という論理型(boolean型/ブーリアン型)で返します。 プチコンは真偽値は おちゃめさんの説明の通り、True(真)が 0以外で、False(偽)が 0 となるため、数値と同じように扱えます。 比較演算子や論理演算子も たしざんや かけざんと同じ計算する演算子と思えば、カッコで優先順位を気にして書くことで、すこしはわかりやすくなると思います。
2そうだね
プレイ済み
返信[12]
親投稿
私的には区別がこうなっています 比較演算子 → 等号や不等号の類 論理演算子 → && || ! ビット演算子 → AND OR XOR NOT
0そうだね
プレイ済み
返信[13]
親投稿
Thei(ゼイ) telanosansei
分かりやすい解説有難うございました。 締め切ります。
0そうだね
プレイ済み