ユーザの入力が不適当だった場合の対応

1996.11.26


 ダイアログでユーザに入力を求めた場合、ユーザが不適切な入力をすることは十分考えられます。例えば「整数を入力して下さい」と指示しているときに「たこ焼き」と入力されれば、当然スクリプトはエラーを返すことになります。ここではそういったときの対処の仕方を説明します。


 まず、ユーザが不適切な入力した場合のスクリプトの動作には、どのようなものがあるでしょうか。

  1. エラーを返してスクリプトを終了する
  2. なにもいわずに終了する
  3. ユーザが適切な入力を行うまで繰り返し入力を促す

 スクリプトを作る立場からすれば「ユーザが間違えたのだからエラーがでるのは自分のせいではない」と言いたくなるところです。しかしユーザが入力ミスをした場合などはスクリプトが停止してしまうより作業を続行できた方がずっと便利ですし、「あいつの作ったスクリプトはエラーばかり出る」と言われたくもないので (^ ^;) エラーの場合の処理をする必要性が出てくるわけです。

 エラーを出さずにすませる一番簡単な方法は、「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

 これで、ユーザの入力が不適切であったということがユーザに知らされることになります。

 さて、と。

 こういった「エラー処理」は、完璧をめざすと大変な労力を要します。また、自分が個人で利用するするスクリプトに対して必要以上のエラー処理を行うことは、基本的に無意味です。「誰が使うのか」「どういう使い方をするのか」を常に念頭に置いてスクリプトを組む必要がありますね。


Tipsに戻る
AppleScriptのページに戻る
このホームページに関するお問い合わせは、karino@drycarbon.comまで。