論理演算のショートサーキット

ショートサーキットとは

 and論理演算子の左辺がfalseだった場合、右辺がtrueだろうとfalseだろうと、演算結果は必ずfalseです。
 そのような場合は右辺の式を処理するのは無駄なので、AppleScriptは処理しません。このような処理をショートサーキット(short circuiting)といいます。
 次のスクリプトでは、beep命令は値を返さない命令にもかかわらず、処理されないのでエラーとなりません。

false and beep

 同様にor論理演算子でも左辺がtrueだった場合、右辺の値にかかわらず結果はtrueですから、右辺の処理は行われません。
 次のスクリプトでは、100は真偽値に変換できない値にも関わらず、エラーとなりません。
 orの右辺は処理されていないのです。

true or 100

高速化に利用する

 具体的に、どのような場面で利用するかと言えば、例えば次のようなスクリプトでは。

if |左辺| and |右辺| then |命令|()

 |左辺| は必ず実行されますから、できるだけ実行するのに時間がかからないものや、大きな確率でfalseとなるものを置いた方が有利だと言えます。

 orの場合の左辺も同様に、時間がかからないもや、trueの確率の高いものを置く方が有利です。

処理の分岐に利用する

 左辺の結果によって、右辺が実行されたりされなかったりするというのは、if〜thenと似ています。
 これを積極的に利用することも考えられますが、注意しなければいけないのは、必ず真偽値を返す処理である必要があることです。

x(1) and x(2) and x(3) and x(4)

on x(n)
	display dialog "選んで下さい" & n & "番目" buttons {"true", "false"}
	return button returned of result = "true"
end x

 実行してみると、trueが選ばれている限り、次の式が実行されるのが分かると思います。
 上手く使うとスクリプトがスッキリすることもありますが、無理に使うと理解不能なスクリプトになる危険性もあるので注意して下さい。
 ちなみに、Perlという言語では、非常に頻繁に使用される方法です。


2000-08-15 -2004-04-14