注意していることといえば、久しぶりに使うときは一度f1キー押して使い方を確認する。
if文は言語によって表現の違いが大きく現れる場合があります。条件式も違ったりするのでHSP3に限らずですが、しばらく触っていなかった言語を使うときは都度調べます。
どうしてもたまにあるんです。「あれ?この言語はこの書き方だっけ?」というのが。
なるべく各言語の標準的な書き方で使いたい派閥なので、不安なときは確認します。
あ、でもとりあえずカッコつけとくのはたまにやります。
> 命令をif文の条件式の二つにいずれかに入れても機能しないというのは合っていますか?
正しいですが、一部正しくありません。
1つif文に書ける「条件式」は、1つだけです。「if」〜「:または{」の間に書いた1文がまるごと1個の「条件式」です。
HSP3のif文の「条件式」は、「条件式」として書かれた式の計算結果の数値を見て判定しています。
条件式の計算結果が 0 の場合 :条件が満たされていないとして処理する
条件式の計算結果が 0 以外の場合:条件式が満たされているとして処理する
IF 123 : mes "True" : else : mes "False"
a = 10>0 ; 条件式の計算結果は数値なので、変数に代入できます。
mes a
a = 10<0
mes a
a = (10>0) and (3>2)
mes a
; a = mes "test" ; ←これはエラーになる
命令の結果は stat などを通して値を返しますが、命令の書式は値を返さないので式として使用できません。なので、if文の条件式には使用できません。
関数は必ず値を返すので、条件式として使用できます。
マクロは値や関数を割り当てれば値を返すので条件式として使用できますが、命令をマクロに割り当てた場合は値を返さないので条件式には使用できません。
> &などの論理演算子
前述した説明にも関連するのですが、論理演算とマニュアルに記載されていますが実際にはビット演算が行われています。(「プログラミング・マニュアル 3.12.条件判断」参照)
これを知っていないと、思ったとおりに分岐してくれずに困ることがあります。HSPのIF文で誰もが通る落とし穴ですね。
> また、&などの論理演算子は使わないように目的が達成できるように努めています。
> そうすることでバグを生むことを減らすことができるのです。
読みやすく、書いてあることの意味が分かりやすく、バグやミスを見つけやすいのであればそれでいいと思います。
私も条件が多くなると場合分けが複雑になりすぎて手に負えなくなることがあるので、論理演算を理由なく使うことがないように気をつけています。
ただ論理演算子を避けるのではなく、より理解して使うと表現の幅が広がるので、もっと見やすく分かりやすく、バグやミスを見つけやすい書き方ができると思いますよ。