縦に長いのもイヤだけど、横に長いのも避けたい。
これカッコイイと勘違いされる向きもあるけど、感心しない。
そういう風に考え変わったのも途中から。
メソッドがオブジェクト呼び出し、さらにそのメソッド使うとき、
objA.methodA.methodB
って、
Dim objB As ObjB = objA.methodA
objB.methodB
って書かなくても、省略できるし、その方が簡潔なことはよくある。
そして、いくらでも数珠つなぎに出来る。
それ別に美徳じゃねえよ。
全部逐一変数に入れるのは、もちろんカッタルイけど、
適当なところで、横の長さも切るべきだ。
呼んだオブジェクトが無く、例外発生すると追いにくい。
ちなみに、坂本先生のRubyでも、そこ勘違いしてんじゃねえかなぁ。
ってフシはある。
目安は、2回出てくるなら数珠つなぎ2回書くのやめる。
objA.methodA.methodB.methodC
objA.methodA.methodB.methodD
って、羅列するなら、
Dim objC As ObjC = objA.methodA.methodB
Debug.Print( objC ….)
objC.methodC
objC.methodD
とか。
何かデバッグ出力も挟んどく。
自分で確認するときラクだし。
VBの場合は、インデント増えるけど、
Withっていう機能があるので、
そっち使って汚くない場合は、そっち使うこともあります。
まあ、数珠つなぎの羅列が沢山出てくるのは、
見てて気持のいいものではないです。
ああ、思い出した、それと、
あるコーディング規約で、(VBじゃないけど)
funcA( a == true );
じゃなくて、
funcA(a);
って必ず書けとあった、
うーん、普通は何も考えなければ後者で書くけど、
funcA(!a);
は、
funcA( a == false );
に比べて、そんなに優れてるのか、
a == true が冗長だから、って理由だけで、その規約決めたなら、
ちょっと賛成しかねるな。
いや、何も考えなければ funcA(a); って書くけど、
一周して、funcA( xxx.yyy.zzz == false );
って、敢えて書くことはあるよ。
そういえば、規約の方が無神経って思うこともあった。
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。