判定文と真偽値

判定文は真偽値を返す

 if〜then文は、通常ifとthenの間に判定文を置きますが、判定文は真偽値を返す式です。つまり正確には判定文が必要なのではなく、真偽値が必要といえます。
 真偽値という事は、if true thenかif false thenのどちらかであるともいえます。
 つまり、次の

set true to theBoolean
if theBoolean = true then display dialog "true です"

というスクリプトは、以下のように書いても同じ働きをします。 

set true to theBoolean
if theBoolean then display dialog "true です"

 また、次の 

set false to theBoolean
if theBoolean = false then display dialog "false です"

というスクリプトは、以下のように書いても同じ働きをします。
 変数の前にnot演算子を置いて、真偽値を反転させているところがミソです。 

set false to theBoolean
if not theBoolean then display dialog "false です"

真偽値を返す属性

 ということは、真偽値を返す属性ならば、ifの中に直接書く事で判定できるということです。

set theFile to choose file
tell application "Finder"
	if locked of theFile then display dialog "ロックされています"
end tell

 もちろんnot演算子で値を反転させる事もできます。

set theFile to choose file
tell application "Finder"
	if not locked of theFile then display dialog "ロックされていません"
end tell

真偽値を返す命令

 属性でも大丈夫ならば、当然ながら真偽値を返す命令でも可能です。
 真偽値を返すOSAX命令やアプリケーション命令はあまり多くありませんが、自分で作る利用者定義命令なら話は別です。

if isLacky() then
	display dialog "今日は良い事ありそう"
else
	display dialog "今日は普通の日"
end if

on isLacky()
	return (random number 2) = 0
end isLacky

 ハンドラ名を分かりやすいものにしておけば、スクリプトの可読性も上がります。

repeatの判定文

 repeat文でも判定文を置くタイプのものは、真偽値を返す変数・属性・命令に置き変える事ができます。
 以下のスクリプトではtheBooleanがtrueになったらループが終了しますから、ダイアログに"true"が表示される事はありません。

set theBoolean to false

repeat until theBoolean
	if theBoolean then
		display dialog "true"
	else
		display dialog "false"
	end if
	set theBoolean to (random number 2) = 0
end repeat

 すぐに応用できるようにはならないかもしれませんが、覚えておくと便利でしょう。
トグル(ON/OFF)処理」で使っていますので、参考にして下さい。


2000-06-04