Javaじゃこんなコード書けない

よね?

RubyLispSmalltalkなら書けるけど。

def with_error_handling
  begin
    yield
  rescue Exception
    puts "error!!"
  end
end

with_error_handling {
  result = 10 / 2
  puts result
}

with_error_handling {
  result = 10 / 0 # zero divide
  puts result
}

で。Javaとかだとこんな感じ*1。エラーハンドリング部のコードの重複が切ない。

begin
  result = 10 / 2
  puts result
rescue Exception
  puts "error!!"
end

begin
  result = 10 / 0 # zero divide
  puts result
rescue Exception
  puts "error!!"
end

ちなみに。結果はこんな感じ。

5
error!!

On Lisp (PDF)Paul Grahamに教えてもらったんです。

*1:コードはRubyだけど

3度目の法則

リファクタリング本(ISBN:4894712288)より、リファクタリングを行うタイミングのガイドライン

最初は、単純に作業を行います。2度目に以前と似たようなことをしていると気づいた場合には、重複や無駄を意識しつつも、とにかく作業を続けてかまいません。そして3度目に同じようなことをしていると気づいたならば、そこでリファクタリングするのです。