Mr.Tです、こんにちは。
オノデラさん:http://blogs.wankuma.com/yo/archive/2007/10/02/99154.aspx
のエントリに対して、とりこびっちさんがつけたコメントにビクッと反応。言葉の意味を取り違えている可能性は大ww
わたしはVisual Basic であっても Optional はなんかしっくりきません・・・。
いや、Optionalは、いいものだ...
VB.NETになってから、メソッドのオーバーライドができるようになったので、引数を増やしたり、減らしたりと
いうことができるようになりました。大変、便利なものです。
例えば、絵を描くというメソッドがあった場合、
Private キャンパス as 画用紙
Public Sub 絵を描く(byval 筆 as 絵筆)
線を引く(キャンパス, 筆,ここから、ここまで)
end sub
Public Sub 絵を描く(byval 筆 as 絵筆,byval 指定色 as 色)
筆.色 = 指定色
線を引く(キャンパス, 筆,ここから、ここまで)
End Sub
Optionalを使うと、こんな形ですね。
Public Sub 絵を描く(byval 筆 as 絵筆,optional byval 指定色 as 色 = 赤)
筆.色 = 指定色
線を引く(キャンパス, 筆,ここから、ここまで)
End Sub
一番違うのは、Optionalの場合、引数に対して最初に初期値を与えないと赤で線が引かれてしまうわけです。
しかし、Optionalの使い方は、オーバーライド的なものと、そういうもんじゃないものがあるような気がします。
例えば、
Public Sub 絵を描く(byval 筆 as 絵筆,Optional 上塗りフラグ as boolean = False)
if 上塗りフラグ then
(1) 線を引く(キャンパス, 筆,ここから、ここまで) 'この場合は、下に絵が描かれていても上書き
else
Dim 線引きエリア as エリア = キャンパス.エリア取得(ここから,ここまで)
for each 点 in 線引きエリア
if 点がすでに塗られてる?= false then
点を描く(キャンパス, 筆,点)
end if
Next
end if
End Sub
こんな風。これがもし、Optiona 削除フラグ みたいなものなら、「線を消す」メソッドをつくりなさいよ、とか
キャンパスの下地色で線を引け、とかいう話になると思います。
Optionalに描画メッセージ(線じゃなく、文字を書く)みたいなものも、だめです。
本来の意味が違うことになってしまうので。
でも、わざわざ上塗りしないメソッドを別につくりたくないです。
そういうのは、絵を描く時に、ちょっと気をつけたらいいことでしょ?
この上のメソッドってのは、実際に絵を描きたいだけですが、すでに絵がある場合は、そこを抜いて
描いていきます。本来の意味は失われていません。
オーバーライドして上塗りフラグをつけてもいいのですが、(1)の部分が、二重になります。上記の例なら一行ですけど
これが複数行になった場合は、結構冗長になりそうな感じがします。
Optionalってのは、「本来のメソッドの意味を失わずに、その機能を細かく制限したいとき」に利用できるVBらしい
機能っていえるのじゃないでしょうか。