後書きスタイルでデコレータ

こういう書き方って有りなんだろうか。

class Proc 
  def sorround_by(&block)
    block.call
    self.call
    block.call
  end
end

lambda{
  puts "one"
  puts "two"
  puts "three"
}.sorround_by{
  puts "-------"
}

結果:

-------
one
two
three
-------

普通は

def sorround_by(srt,&block)
  puts str
  block.call
  puts str
end

sorround_by("-----") do 
  puts "one"
  puts "two"
  puts "three"
end

結果:

-------
one
two
three
-------

という感じでブロックを取る関数を書く。だけど、この例のデコレーションした出力、や何らかの処理を前後に挟む場合、何で囲っているか(sorround_by)はさして重要じゃなくて、その中身のほうがメインだったりする。

つまり、確かにsorround_byしてるんだけど、それは「ちなみに」という程度という状況。
ならば、最初にメインの部分を書いて、その後に「ちなみに」な部分を書いた方が見やすいのかと思った。

lambda{
  メインの処理
}.ちなみに{
  これこれしといて
}

これならメインな処理を頭に持ってきつつ、補足的な「ちなみに」処理を後書きできる。

例:スレッド排他

lambda{
  メインの処理
}.synchronized(@mutex)

微妙。同期って重要だし、先に書けよって感じも。

例:描画処理で影をつける

lambda{
   円を描く処理
   線を描く処理
}.with_shadow{
   影を描く処理
}

イメージ図:

影なんて見た目いかにもおまけなので、有りかも。