IF ~ THEN GOTO ~ のようにTHEN以下にGOTOのみが書かれている場合のみ「THEN」もしくは「GOTO」が省略できます。
私のサイトでも書いていますが、プチコンでは省略できるものは多数あります。
IF B AND 16 THEN ~というのもすでに省略された状態ですが、このように無意識に省略形を使っている場合も多いですね。
うくじーさんへ
ビット演算と論理演算の違いは最初のうちは難しいかもしれませんが、それが分からなくてもIF文においては比較演算(「!=」や「==」など)を省略せずに書けば気にする必要は全くありません。
もやしもどきさんへ
「分からないうちは比較演算を省略しない」というのが初心者にとっては最も分かりやすいと思います。
「比較演算を省略しない場合の書き方」が今回の焦点となっている部分でBUTTON関数においては「(B AND 16)!=0」や「(B AND 16)>0」ではなく「(B AND 16)==16」が最も適切だと私は考えています。
初心者のうちからそうやって覚えておけば「このプログラムがなぜ正常に動作しないのか分からない」という心配は皆無になります。
よっぱらいさんへ
それはIF B AND 48 THEN ~と同等になりますが、それだとABボタンの同時押しの判定はできてないんですよね。
スーさんへ
自分で覚えるならば自分で分かりやすい覚え方をするのが一番ですが、講座などを書いたり他の初心者に教える場合はなかなかそういうわけにもいきません。
初心者が例えばIF A==1 AND B==2 THEN ~ みたいなIF文を見たときにANDが「かつ」ではないと認識したらどのように理解させるかが問題になってしまうのが難点ですね。
けいさんへ(続き)
Aボタンを押している場合はB AND 16の値は16になるため「!=0」よりは「==16」の方が自然だと私は思います。
比較演算を省略して誤動作する原因は無意識のうちに「!=0」を行っているためなのでそれを防止する役割もあります。
また公開されているプログラムの多くはIF 条件式 AND 条件式 THEN ~で記述されているため結局「&&」だけの説明ではなく条件式の結合としてANDの説明も必要になってしまいます。
うくじーさんへ
なぜオススメできないかというとプログラムがちゃんと動かないという原因を招いてしまうからです。
例えばAボタンとBボタンの両方が押されたかどうかは
IF (B AND 16) AND (B AND 32) THEN ~
という感じの記述になってしまいがちです。(ANDを&&で記述するというのもビット演算と論理演算の区別がつく人以外はオススメできない)
これが、基本通りに書けば
IF (B AND 16)==16 AND (B AND 32)==32 THEN ~
で正しく動作します。
また、この基本形の意味をちゃんと理解していれば
IF (B AND 48)==48 THEN ~
とすることでABボタンの同時押しの判定も簡単に可能になります。
Aボタンが押されているかどうかを判定するのに
B=BUTTON()
IF B AND 16 THEN ~
というような書き方をしている人は非常に多いと思いますが、これはあくまで省略形であり省略せずに書こうとすると
IF (B AND 16)==16 THEN ~
となります。(IF (B AND 16)>0 THEN ~ も特定条件下でしか使えない)
どういう場合に省略できるのかを理解して使うのであれば問題ありませんが、そうでない場合は省略形はあまりオススメできません。
個人的にはX、Yの移動量を別の変数に入れておくのがオススメです。
これならば省略形が使える条件を満たせるので4つのIF文で簡単に記述できます。
@LOOP
B=BUTTON()
VX=0:VY=0
IF B AND 1 THEN VY=-2
IF B AND 2 THEN VY=2
IF B AND 4 THEN VX=-2
IF B AND 8 THEN VX=2
A=(ABS(VX)+ABS(VY))/2
IF A THEN X=X+VX/A:Y=Y+VY/A
SPOFS 0,X,Y
VSYNC
GOTO @LOOP
縦横移動時は2ドットずつ、斜め移動時は縦横1ドットずつ動かしたいならば
B=BUTTON()
IF (B AND 15)==1 THEN Y=Y-2
IF (B AND 15)==5 THEN X=X-1:Y=Y-1
(以下略)
のように基本通りにANDを使っても8方向の判定を行えば記述できます。
IF B AND 1 THEN ~のような省略形はどんな場合に省略できるのかを正しく理解していないと使うべきではなく基本に忠実にIF (B AND 1)==1 THEN ~と書くのをオススメします。
ANDやORは論理演算子ではなくビット演算子なのでIF文で使う際には論理演算子とは結果が変わります。
IF BUTTON() AND 16 THEN BEEP
IF BUTTON() && 16 THEN BEEP
前者はAボタンを押した時にBEEPが鳴りますが後者はどのボタンを押してもBEEPが鳴ります。