&&について

[戻る]
C++ど素人 2002/03/04(月) 03:01:02
if("Aが存在するか"){
  if("Aの値が1なら"){
    TextOut("Aは1でした")
  }
}

ifを2つ使ったのは、Aが存在しないのに
if("Aの値が1なら")
を実行するとエラーになるからです。
こんな場合でも

if("Aが存在するか" && "Aの値が1なら"){
  TextOut("Aは1でした")
}

とすれば、Aが存在しなければ&&の右の
"Aの値が1なら"
は評価されずにエラーにならずにifはFALSEの処理になるんですか?

試~1 [E-Mail] 2002/03/04(月) 09:01:17
&&や||を使った論理演算では、式を左から順に評価し、
最初のオペランドの値だけで演算結果を判断できるときは、
2番目のオペランドは評価されません。

したがって、

> if("Aが存在するか" && "Aの値が1なら"){
>   TextOut("Aは1でした")
> }

この式で問題無いですね。

EIJI 2002/03/04(月) 19:02:14
ごみです。

ちなみにVBの場合は、どんなときでも条件をすべて評価するので
1行のIf文で書くことはできません。

TAD [E-Mail] 2002/03/04(月) 20:14:35
> &&や||を使った論理演算では、式を左から順に評価し、
> 最初のオペランドの値だけで演算結果を判断できるときは、
> 2番目のオペランドは評価されません。

これは知りませんでした。
ということは、1番目と2番目の両方を処理させた上で、条件分岐させたいときは、このような
コードは書けないんですね。(例えば、2つの関数でファイルからデータを読み込んで、両方の
関数が正常終了したら……など)
結構やりそうなので、これからは気を付けなければ。

クラフトマン 2002/03/05(火) 00:28:01
>ということは、1番目と2番目の両方を処理させた上で、条件分岐させたいときは、このよう>コードは書けないんですね。(例えば、2つの関数でファイルからデータを読み込んで、両方>関数が正常終了したら……など)
『一つ目に読み込みが失敗したら、二つ目は読まない』という仕様なら、ありですね。

極端な例を挙げれば、
if (a-- && b--)
なんて書き方もあります。aが0になったときに、bはどうなるのか(笑)
仕様によっては、これが正解かもしれませんが、これでは、あまりにも書き手の意図がわか
りにくいでしょう。
要は、十分理解した上で、可読性を考慮して書けばよいかと思います。
書き手の意図が、第三者や、一ヵ月後の自分に伝わるかどうかを考えて、条件判断を分ける
なり、適切なコメントをつけたりするということですね。
不特定多数の人間が携わるプロジェクトでは、副作用のある記述は一切禁止する場合もあり
ますが、私自身は、『プログラマを苦しめるためのコーディング規約』は嫌いなので、合意
の上で上記方策をとっています。

クラフトマン 2002/03/05(火) 00:38:19
訂正するのもなんですが、(^^;;
正確には、『aが0になったとき』ではなく『aが0のとき』ですね。

C++ど素人 2002/03/05(火) 22:00:42
[[解決]]
ご回答ありがとうございます。
VBとソースの見やすさに注意することも必要ですね。

古いスレッドには追加発言できません。