> GENKI さん
> if命令が0か1しか上手く動かず、0,1以外を指定するのは問
> 題があるかのように思われてしまいそうな気がします。
論理演算とビット演算の区別の無い現状では、むしろそのように認識されていた方が、今回のような問題に遭遇する事がないので幸せじゃないかと思います。記述量が増えるので手間は掛かりますが、それ以外の実害もない訳ですし。
よりベターなのは、条件式には「=, !, <, >, <=, >=」の比較演算子(+論理演算子)を使っていなければならない、と認識される事ですね。条件式の結果が 0, 1 以外だと問題があるという認識は、比較演算の結果が HSP ではどう表現されるのかを知らないといけないですから(まぁ、0 or 1 になるんですけれども)、知らなくても良い内部実装の話に踏み込みすぎてる感があります。
if x+1: y++ ; エラー!! 比較演算子を使っていない!!
if x+1 ! 0: y++ ; OK!! 比較演算子を使っている!!
M さんもおっしゃっているように、比較演算子付けた方が意味も分かりやすいと思います。
> 複数の条件を使用するときの例として、1例を加えたほうがいいような気がします。
条件が 1 個の時と 2 個以上の時で記述の仕方が変わってくるという非対称性が気持ち悪いですが、過ちを減らすという意味ではそれでも十分良いと思います。
いずれにせよ、それを提示してお終いにするのではなく、言語仕様の変更、つまり、本当の意味で論理演算をする論理演算子を定義するのを最終目標として欲しい所です。要は、C 言語の「&&」や「||」と同等の物を作って欲しい訳です。結局 C です、ハイ。なんかスイマセン。
解説情報を公開する事は大変重要でありがたい事なのですが、公式マニュアルとか、それに匹敵する程有名な解説サイトなど、開発を始めるに先立っての基礎知識を得る場所にそのような解説が無い限りは、結局、問題が起こった後の対処療法にしかならないんですよね。そうじゃなくて、そもそもそんな問題が起こらない予防をしておくのが重要なんじゃないかと思うのです。中でも言語レベルで予防線が張れると完璧なので、こうしてくどい位に言ってるのですが…。
(そんな予防と成り得る公式マニュアルには、注意書きとして論理演算がビット演算として実装してある旨の1 文があり、「よ〜く」読んでおけばこの問題に躓かないと思うのですが、やっぱり皆、リファレンスやサンプルしか読まれていないんですかね…。p_;)
まぁ、このような事もあって、現状の言語仕様・マニュアル・リファレンスに、どこかしらマズイ所があるためこういう惨状になっており、何かしらの対策を立てる必要があるのではないかと思う訳です。
> ANTARES さん
> 「if key==256 & a==1」とすべきです。
それは、これまでの話とはまた別の話だと思いますよ。
これまで GENKI さん、ANTARES さんの挙げられた条件式達とは意味も挙動も全く違うので、どちらでも構わない事は無く、自分のやりたい事に合う方をよく考えて、適切な方を選択すべきです。