基礎プログラミング I 第 6 回 (正規表現と検索) 「操作間違いをユーザに知らせたい場合」 講義ノート目次

STDERR.print という実行文の場合、ユーザが誤った操作をした場合に、 ユーザの使用している画面に標準出力される。例えば、 コマンドライン入力しなければならないプログラムに対して、 入力情報を忘れたユーザに対しては、 プログラムの冒頭にエラーメッセージを伝え、 プログラムを強制終了させるなどの工夫ができる。


if ARGV[0] == nil
  STDERR.print("入力に失敗しました\n")
  STDERR.print("出発地 目的地 特急券の種類 支払い方法 の順に入力\n")
  exit(1)
end

まず配列 ARGV に入っている要素 ARGV[0]nil (無効) になっているかどうか調べ、 STDERR.print で、エラーメッセージをユーザ画面に出力させ、 正しい使いかたを誘導している。

なぜ標準エラー出力 (STDERR) を使うのか

操作間違いは、空欄ばかりではない。 例えば、整数値を計算させたいプログラムに対しては、 文字列が入ってしまった場合も操作間違いである。 あるいは改行のみ入力された場合、 負の数や小数点などが入力された場合も操作間違いである。

プログラムの計算結果を他のファイルに打ち出すような場合、 この STDERRprint と結合していることで、エラーメッセージはファイルに行かず、 ユーザの目にふれる。 例えば窓口業務の場合、特急券を印刷して手渡すが、 このときに印刷の実行するしくみは次のようであった。

% ./argv_ticket.rb > confirm.txt

STDERR なしではエラーメッセージが confirm.txt に書き出され、発券(券に印字されてしまう)まで気づかない。 標準エラー出力を print 文 につけておく理由は、 利用者が操作間違いをしたことが分かる ようにするためである。