ダイアログでユーザに入力を求めた場合、ユーザが不適切な入力をすることは十分考えられます。例えば「整数を入力して下さい」と指示しているときに「たこ焼き」と入力されれば、当然スクリプトはエラーを返すことになります。ここではそういったときの対処の仕方を説明します。
まず、ユーザが不適切な入力した場合のスクリプトの動作には、どのようなものがあるでしょうか。
- エラーを返してスクリプトを終了する
- なにもいわずに終了する
- ユーザが適切な入力を行うまで繰り返し入力を促す
スクリプトを作る立場からすれば「ユーザが間違えたのだからエラーがでるのは自分のせいではない」と言いたくなるところです。しかしユーザが入力ミスをした場合などはスクリプトが停止してしまうより作業を続行できた方がずっと便利ですし、「あいつの作ったスクリプトはエラーばかり出る」と言われたくもないので (^ ^;) エラーの場合の処理をする必要性が出てくるわけです。エラーを出さずにすませる一番簡単な方法は、「try」構文でスクリプトの最初から最後までを包み込んでしまうことです。しかしこの方法ではスクリプトのせいで生じたエラーまですべて無視してしまうため、スクリプトが本当に正しく動作しているかどうか疑問が残ります。
本来、スクリプトの信頼性を高めるためには、エラー用の構文をできるだけ使わない方がいいわけです。エラーが出ないようにスクリプトを組んで、どうしてもエラーが生じる場合のみそういう構文を使用する方がいいでしょう。
では、「ユーザが適切な入力を行うまで繰り返し入力を促す」という処理を考えてみましょう。(スクリプト例をダウンロードして下さい)
例えば整数を入力して欲しい場合、普通ダイアログでは次のように尋ねると思います。
display dialog "好きな整数を入力して下さい。" default answer "120"
しかし実際に入力されるのは、(それが数字であっても)文字列です。したがって、文字列を整数に変換する必要があります。
set returnNumber to ( text returned of result ) as integer
もしユーザが整数以外の文字列を入力していた場合、ここでエラーが生じます。つまりユーザが入力した後、このエラーが出ないときだけ「無限ループ」から脱出できるようにスクリプトを組めばいいことになります。
repeat
display dialog "好きな整数を入力して下さい。" default answer "120"
try
set returnNumber to ( text returned of result ) as integer
exit repeat
on error
end try
end repeat上の例ではユーザが不適切な入力をした場合、なにもいわずに再入力を促します。それでは分かりにくいと考えるなら「きちんと整数を入力して下さい」とはっきりユーザに知らせることもできます。
repeat
display dialog "好きな整数を入力して下さい。" default answer "120"
try
set returnNumber to ( text returned of result ) as integer
exit repeat
on error
display dialog "今のは整数ではありません。" buttons {"OK"} default button 1
end try
end repeatこれで、ユーザの入力が不適切であったということがユーザに知らされることになります。
さて、と。
こういった「エラー処理」は、完璧をめざすと大変な労力を要します。また、自分が個人で利用するするスクリプトに対して必要以上のエラー処理を行うことは、基本的に無意味です。「誰が使うのか」「どういう使い方をするのか」を常に念頭に置いてスクリプトを組む必要がありますね。