- - PR -
VB2005の言語仕様の落とし穴について(ソース付き)
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-20 18:07
いつも勉強させていただいております。今回は質問をさせていただけないでしょうか。
下記のコードがあります。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MsgBox(func(1)) MsgBox(func()) End Sub Function func() As String Return "ABC" End Function VB2005で、コンパイルエラーになりません。 実行もできます。 不思議ですね。でも、理由もわかりました。 つまり、デフォルトのプロパティを使っているという事です。 ものすごく、紛らわしいと思いませんか? せめてワーニングを出して欲しいです。 これで、かなりのバグが含まれる可能性があるように思います。 そこで、質問です。 エラー、ワーニングを出す方法ってあるのでしょうか? それでは、よろしくお願いします。 | ||||||||
|
投稿日時: 2007-04-20 18:52
僕も一瞬なぜ動くのかわかりませんでした。
これ制限する方法あるのかな・・・ #Relax Delegate みたい MsgBox(func()(1)) なのね。。。 _________________ かるあ のメモ http://karua.at.webry.info/ [ メッセージ編集済み 編集者: かるあ 編集日時 2007-04-20 19:01 ] | ||||||||
|
投稿日時: 2007-04-20 18:57
Chars プロパティですね。
あくまで私見ですが、私はそうは思いません。 コーディング段階で確認するでしょう。(今やインテリセンスもありますし) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-04-20 19:19
インテリセンスとかってなにかの拍子にうまく出てこなかったり、 さっさと打ち込んでると確認するまでもなく入力してしまうこともあるし、 その辺でミスしたところを捕まえてくれるのがコンパイラの仕事だと思うので… 入力時にミスしたら、もう見つからないってのはそれはそれで厳しいと思います。 コードレビューとかでは気づきにくいってのもあります。 ※こういうのを捕まえるのに適した機会はコンパイル時くらいしかないという意味です。 --追記 デフォルトプロパティというよりも、括弧を省略したメソッド呼び出しの問題ですね。 [ メッセージ編集済み 編集者: なちゃ 編集日時 2007-04-20 19:20 ] | ||||||||
|
投稿日時: 2007-04-20 19:39
インテリセンス云々は、括弧で書いているとおりあくまで補助的なものです。 「コーディング段階で確認するでしょう」 というのは、自分が書いたコードならば、 自分で知っているでしょうし、他人のコードであれば確認するというレベルで話をしています。 私が紛らわしいと思わないのは、この手のことでハマったことが一度もないからです。 他の人の感覚までは、知るコトができないので "私見" と前置きしました。 まあ、今回の例はメソッドなのですから括弧の強制くらいあってもいいとは思いますね。 どちらにしても、Func().Chars という書き方は私はしないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-04-20 20:28
多分、「紛らわしい」の意味の認識が微妙に違うのでしょう。 私もこれではまったことは(おそらく)ないですが、これを見てややぞっとしました。 このミスをしてしまったときに、気づかない、あるいは見落とす危険があるからです。 ※ミスってのはタイプミスレベルのミスの話です。
今回は記述をするしないの問題ではなくて、間違って書いてしまった場合に、 エラーにならずに意図しない動作をしてしまうという部分について、だと思います。 | ||||||||
|
投稿日時: 2007-04-20 20:55
私は VB2005 を良く知らないのですが、これは、昔からの VB (VB2 位の頃?)からある問題と同じことでしょう。 (VB というより、OLE などの Windows のコンポーネントアーキテクチャの問題?) そして、これは結局は「デフォルト」というものの存在による、悪影響です。 どんな言語でも「デフォルト」があると、問題が目に見えにくくなるので、とにかくややこしくなります。コーディング時にキーボードタイピングのキーを押す回数を少なくするだけのための「デフォルト」ならば、いっそないほうがずっと良いと思います。 また、「デフォルト」があるにしても、「デフォルト」にアクセスするために、専用の記述があれば、目に見えるのでこういう問題も少なくできると思います。コンピューターのランタイム環境自体は、言語仕様にしたがってパースするのでデフォルトがあることが当然分かりますが、人間は、ソースコードに字として書かれていないものを意識することは難しいでしょう。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||
|
投稿日時: 2007-04-21 09:47
同感です。 同じ並びにある他のプロパティとは別に1つだけ省略可能にしてにしても、ちょっと横着できるだけで良い事ではないんじゃないかと。 理解している一部の人以外がわからず使うより、デフォルトは無くしてちゃんと書かないといけないようにした方がいいんじゃないかな。 |
1|2|3|4
次のページへ»