後書きスタイルでデコレータ
こういう書き方って有りなんだろうか。
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{
影を描く処理
}