Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

曖昧言語仕様にはまってもた。

  VB6.progamerの話題が時々でますが, はまってもた。
  VB6では正常終了するが.netだと落ちる問題。(インスタンスのnew問題です.)
     100:  dim  c as  new Class_A
     200:  c = nothing
     300:  XYZ(c)
     400:  :::::end::::::
     500:  sub XYZ(byref c as Class_A)
     600:   c.add( "ABC")
     700:  end sub
             (各行の間にはステートメントがありますが,必要な箇所だけ抜粋 : Class_A は add.メソッドを持つ)
 コードとしては問題はないのだが,実行時に問題が発生する。
 普通の思考だと,  200行で c= nothingして XYZをCallするから,600:行で  cは Nothingになっていて, 落ちる...

.しかし, VB6だと,インスタンス化されるので 正常終了する.
    ognacとしては,VB6の行儀の悪い言語仕様だと思っている, ご法度にすべき。
    VB6では,DIMは宣言文で,実行文への展開はしない.初めて使用されたときに,インスタンス化される.
    とすると, 200行の c= nothing の時は, インスタンス化してから,Nothingしてるのかな?

 VBの敷居を低くするのと, 言語仕様を曖昧にするのとは別物だと思う。
 曖昧な言語仕様が,曖昧なプログラマーを生み,繁殖していったのは,否定しがたいと思う。
 曖昧なまま .netに移られても,  .net Nativeなプログラマにはなれないと思うが、どうだろう

投稿日時 : 2006年8月10日 18:47

Feedback

# re: 曖昧言語仕様にはまってもた。 2006/08/11 8:36 じゃんぬ

VB6 で、

Dim c As New ClassA

は、今回のような事態を招く原因です。

Dim c As ClassA
Set c = New ClassA

でなければ、今回早期に発見できたでしょう。
後者の場合、c が Nothing である場合に、
使用した場合は実行時エラーになりますが、
前者は実行時エラーにならず、インスタンスが生成されてしまいます。

# re: 曖昧言語仕様にはまってもた。 2006/08/11 8:36 じゃんぬ

訂正。

s/でなければ/であれば/g

です。

タイトル
名前
Url
コメント