andとorの使い方

プログラムの構造でif文で複数条件を評価する時にand、orを使用しますが、これには別の意味もあります。

if( A and B ){
  C
}

AとBが両方ともtrueの時に、Cが実行される。ただし、必ずしもAとBが両方評価されるわけではありません。Aがfalseの場合、Bは評価する必要がないため無視されます。Aがtrueの場合のみBが評価されます。
下のようなプログラムの場合、気をつけないといけません。

if( db1.insert() and db2.insert() {
  success;
}

db1へのインサートが成功した時のみdb2へのインサートが行われ、両方成功した時にsuccessになります。db1へのインサートが失敗した時は、if文としてfalseであることが確定しているため、db2へのインサートは無視されます。

orも同じように考えられます。

if( A or B ){
  C
}

AかBのどちらかがtrueであればCが実行されます。Aがtrueの場合、Bは評価する必要がないため無視されます。Aがfalseの場合のみBが評価されます。
応用で、

open(FILE,"file") or die "開けません";

PerlPHPなんかでよく使う記述ですが意味は同じです。fileを開くのに成功した場合、orの後ろは評価する必要が無いので無視されます。fileを開くのに失敗した場合のみ、dieされるわけです。

$error_code = 1;
1 == $error_code and die "エラー";

こういう書き方はしないと思いますが、andの左側がtrueの場合のみdieされます。

if( str != null && str.equals("hello") ){

javaだとNullPointerException回避のために、こう書いたりしますよね。これはandの左側がtrueの場合のみ右側が評価されるので、strがnullであればその時点でfalseと判断され、右側のequalsが処理されません。

make && make install

シェルでもよく使います。&&はandと同じなので、makeが成功した場合のみmake installが実行されます。makeが失敗したなら、その時点でfalseになることが確定され、後ろのmake installは評価する必要が無いので実行されません。

if文で複数条件を比較する時、andやorの順番には意味があるので気をつけましょう。結果は同じでも、過程は違ってきます。
PerlJavaPHPの実装ではこうなりますが、言語によっては違ってくるかも。