山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

プロを目指す人のためのRuby入門 その18

第9章 例外処理を理解する

また前回に引き続き例外処理について学びます。

例外処理のベストプラクティス

すべての例外を rescue するのではなく、必要な処理だけを rescue します。問題が発生したら異常終了させる方が良いです。例外が発生したら、原因を調査できるようにエラーメッセージやバックトレースなどをログに出力します。

例外処理の対象と対象クラスを極力絞り込み、補足すべき例外と異常終了すべき例外を分けることが大事です。

例外の発生が予測できる場合は、例外処理ではなく条件分岐を使って対処します。また、想定外のパターンには例外処理を記述します。

正規表現チェッカー

正規表現のパターンにマッチする文字列を表示するプログラムです。正しくないパターンの場合、再入力を求められます。

print 'Text?: '
text = gets.chomp

# 例外処理を組み込み、パターンが正しくないとき、再入力できるようにする
begin
  print 'Pattern: '
  pattern = gets.chomp
  regexp = Regexp.new(pattern)
rescue RegexpError => e
  puts "Invalid pattern: #{e.message}"
  retry
end

matches = text.scan(regexp)
if matches.size > 0
  puts "Matched: #{matches.join(', ')}"
else
  puts "Nothing matched."
end

ensure

例外の発生に関わらず、必ず実行される処理を記述できます。

begin
  puts 'Start'
  1 / 0
ensure
  puts 'End'
end