• ベストアンサー

VBは多少間違ったコードでも動くって本当?

最近C#を始めました。 そもそもC#ってどんな言語かネットで調べると、VBと比較すると難しいと書かれていました。 VBは多少の記述の間違いがあっても動くとありました。 プログラムって人間と違って融通が聞かないものの典型だと思っていたのに、記述の間違いがあっても動くってどういうこと?と疑問に思い質問させていただきました。 どなたか少し具体的に教えていただくことが可能であればお願いいたします。 具体的が無理ならイメージでも構いません。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (766/5721)
回答No.4

難しいよりは厳しいと言った方が正解な気がします。 コンパイルチェックやデータの型に厳しいと言う意味です。 例えば、 VBでは .ToString がエラーになりませんが、 C#では .ToString() のように括弧がないとエラーになります。 他には、 VBでは 1 + "1" は 2 になりますが、 C#では 1 + "1" は "11" になります。 コードで書くとこんな感じと結果になります。 VB ---- Dim a = 1 Dim b = a.ToString Dim c = a + b Console.WriteLine(c) ==== 1 1 2 ---- C# ---- var a = 1; var b = a.ToString(); var c = a + b; Console.WriteLine(c); ==== 1 1 11 ----

gennya
質問者

お礼

回答ありがとうございました。

その他の回答 (4)

  • dell_OK
  • ベストアンサー率13% (766/5721)
回答No.5

回答No.4です。 結果の 1 だけの行は無視してください。 以下のようにaとbを表示していたのをコードからなくしていました。 Console.WriteLine(a) Console.WriteLine(b)

gennya
質問者

お礼

回答ありがとうございました。

回答No.3

コードが間違っていて動くプログラミング言語などありません。 但し、VBには「小さな親切、大きなお世話」的な機能が、 存在していることは確かです。 プログラマの手抜き(無知)について、 暗黙の型変換や、指定がなければ引数を参照渡しにする、 プロシージャ呼び出しを明示的にしなくても、名前だけで 呼び出しと判断する・・などなどですが、 プログラマの想定外の挙動を呼び起こす可能性も 無くはありません。 私はこれは逆に良くない機能だと思っています。 なのでVBでプログラムを書く場合は、 ・明示的に型変換する ・引数はByVal・ByRefを必ず書く ・呼び出しは必ず「call」を書く ・繰り返し構文のnextは対象変数を明記する など、プログラマが自分で厳格なポリシーを設ける必要があると思っています。 C言語系はこのような「大きなお世話」をせずに、 「プログラマ考えたとおりに動作する」仕様に成っていますので、 間違えれば1mmも動かなかったり、暴走したり、 意図せぬ領域を書き換えたりと、神経を使いますが、 ちゃんと書けばちゃんと動きます。 VBの「大きなお世話」も万全ではありませんので、 プログラマが「ちゃんと書く」事が必須なのは、 実は同様であり、難しさも差はありません。

gennya
質問者

お礼

回答ありがとうございました。

回答No.2

> VBは多少の記述の間違いがあっても動くとありました。 文法に間違いが無ければエラー中断せずに動くけど、期待した、思ったようには動かないのでは。 例えば、 a=2 b=3 c=a+b Msgbox a & "たす" & a & "は" & c は動くけど、 「2たす2は5」 って表示内容は期待したものでないと思うけど。

gennya
質問者

お礼

回答ありがとうございました。

  • sknbsknb2
  • ベストアンサー率38% (1158/3030)
回答No.1

ロジックの間違いがあれば期待通りに動くはずはないので、それ以外の要素ということだと思います。 変数には型があって、文字列を示す文字列型とか、数値を示す数値型とかがあります。 例えば、数値型での10と文字列型での10は厳密には違うもので、普通両者を足しても20にはなりません。(型違いの演算でエラーになる) でもVBは文字列型の10が数値として矛盾のないものだったら、気を利かせて20という結果を出したりします。このあたりが「VBは多少の間違いがあっても動く」ということかと思います。 でもこういう仕様は、わかっててそういうコードにしたならともかく、間違えていてもとりあえず動いてしまうので、バグを見つけるのが困難になったりもします。

gennya
質問者

お礼

回答ありがとうございました。

関連するQ&A