Mr.Tです、こんにちは。
Optionalで祭りが発生してから、実はすでに意識は別のところに...
というのは、例のとりこびとさんのエントリ
http://blogs.wankuma.com/torikobito/archive/2007/10/03/99289.aspx
この中の、とっちゃんのコメント。
実装が9割同じで...というのならそんなのは、private メソッドで下請けしてやればいいわけですからw
これに、反応。
#例によって、サンプルは、へたくそです。
実装がほとんど同じで、Privateで下請けってのは、こういうケースですよね?
Private Mr_T as 人 = new 人
Public overloads Sub 昼食を食べる(byval 味噌ラーメン as ラーメン)
while (味噌ラーメン.量 >0)
Mr_T.食べる(味噌ラーメン)
味噌ラーメン.量 -= Mr_T.一度に食べる量
loop
Mr_T.感謝("ご馳走様でした")
end sub
Public overloads Sub 昼食を食べる(byval 味噌ラーメン as ラーメン,byval もやしキライ as boolean)
if もやしきらい = True then
Mr_T.取り除く(味噌ラーメン.もやし)
味噌ラーメン.量 -= 味噌ラーメン.もやし.量
end if
while (味噌ラーメン.量 >0)
Mr_T.食べる(味噌ラーメン)
味噌ラーメン.量 -= Mr_T.一度に食べる量
loop
Mr_T.文句("もやしキライっていっただろぉ")
end sub
ここに、Private な「ラーメンを食べる」メソッドを追加。
Private Sub ラーメンを食べる(byval 食べる人 as 人,byval 味噌ラーメン as ラーメン)
while (味噌ラーメン.量 >0)
食べる人.食べる(味噌ラーメン)
味噌ラーメン.量 -= 食べる人.一度に食べる量
loop
end Sub
すると、
Public overloads Sub 昼食を食べる(byval 味噌ラーメン as ラーメン)
ラーメンを食べる(Mr_T,味噌ラーメン)
Mr_T.感謝("ご馳走様でした")
end sub
Public overloads Sub 昼食を食べる(byval 味噌ラーメン as ラーメン,byval もやしキライ as boolean)
if もやしきらい = True then
Mr_T.取り除く(味噌ラーメン.もやし)
味噌ラーメン.量 -= 味噌ラーメン.もやし.量
end if
ラーメンを食べる(Mr_T,味噌ラーメン)
Mr_T.文句("もやしキライっていっただろぉ")
end sub
とすっきり。
だけど、ちょっとまてよ、とよく考えることがあります。こういうメソッド内容だったら、どうすんだろう。
Private 娘 as 人 = Mr_T.子供
Public overloads Sub 昼食を食べる(byval 味噌ラーメン as ラーメン,byval もやしキライ as boolean)
while (味噌ラーメン.量 >0)
if もやしきらい = True then
娘.取り除く(味噌ラーメン.もやし.一本)
味噌ラーメン.量 -= 味噌ラーメン.もやし.一本
end if
娘.食べる(味噌ラーメン)
味噌ラーメン.量 -= 娘.一度に食べる量
loop
娘.文句("もやし、いらん")
end sub
これって、ループの中にもやしの取り除きがある。でも、これってPrivateでやろうと思うと、切り出せないように
思う。でも、処理はほとんど一緒。
Private Sub ラーメンを食べる() に、もやしキライの引数を追加してもいいけど、ラーメンを食べるのは娘以外の人も食べるから、
必ずもやしキライとはならない。なので、もやしの取り除きを、ラーメン食べるメソッドには組み込みたくないです。
引数に、もやしキライであることを追加することは、そのケースが局所的すぎるように思います。
この場合、どう考えてきちんと組めばいいんだろう、と悩むんです...できるなら、Privateへの下請けだしたいのだけど...