« [VB2010Express] えっと… スペースやタブを見えるようにするには…? | トップページ | [わんくま名古屋] 第17回は 4月 9日 - TDD ネタで喋ります »

2011年3月24日 (木)

[VB] Nothing と比較すると、どうなるか?

VB の Nothing は、 C# とかの null とは違うのだ。 null 判定するには、 Is Nothing を使うのだ …と思い込んでるから、 比較演算子を使われたコードを読んでても、 しばらく気付かなかったわ。 f(^^;

てことで、 問題。
次のコードの出力を答えてください。 正解できたあなたには、VB マイスターの称号をお贈りしませうw

Dim s1 As String = Nothing
If (s1 = Nothing) Then
   Call Console.WriteLine("String
Nothing Nothing と等しいです。")
Else
   Call Console.WriteLine("String Nothing Nothing と等しくありません。")
End If

Dim s2 As String = String.Empty
If (s2 = Nothing) Then
   Call Console.WriteLine("String.Empty
Nothing と等しいです。")
Else
   Call Console.WriteLine("String.Empty Nothing と等しくありません。")
End If

Dim n1 As Integer = 0
If (n1 = Nothing) Then
   Call Console.WriteLine("Integer
0 Nothing と等しいです。")
Else
   Call Console.WriteLine("Integer 0 Nothing と等しくありません。")
End If

Dim n2 As Integer = 1
If (n2 = Nothing) Then
   Call Console.WriteLine("Integer
1 Nothing と等しいです。")
Else
   Call Console.WriteLine("Integer 1 Nothing と等しくありません。")
End If

Dim d1 As DateTime = DateTime.Today
If (d1 = Nothing) Then
   Call Console.WriteLine("DateTime.Today
Nothing と等しいです。")
Else
   Call Console.WriteLine("DateTime.Today Nothing と等しくありません。")
End If

Dim d2 As DateTime = New DateTime()
If (d2 = Nothing) Then
   Call Console.WriteLine("New DateTime()
Nothing と等しいです。")
Else
   Call Console.WriteLine("New DateTime() Nothing と等しくありません。")
End If

Visual Studio 2008 で実行した結果は、次のようになりました。 (白文字)

String の Nothing は Nothing と等しいです。
String.Empty は Nothing と等しいです。
Integer の 0 は Nothing と等しいです。
Integer の 1 は Nothing と等しくありません。
DateTime.Today は Nothing と等しくありません。
New DateTime() は Nothing と等しいです。

# やっぱさぁ、 VB のほうが難しいんだってば!!

|

« [VB2010Express] えっと… スペースやタブを見えるようにするには…? | トップページ | [わんくま名古屋] 第17回は 4月 9日 - TDD ネタで喋ります »

プログラミング」カテゴリの記事

コメント

NothingはIsで比較するものだとばかり。。。
この動作は知らなかった。。。

投稿: karuakun | 2011年10月14日 (金) 09時03分

> DateTimeで一瞬迷いましたが、何となく納得。

ぉお、 さすがです。 フレームワークを VB でガンガン作ってきた人は違う!

> Nothingに初期値にようなものとか意味不明です…(汗)。

Nothing は C# の default(T) だと思ってもらえれば。

それよりも、
If (String.Empty = Nothing) Then
がコンパイルされると、 String の == 演算子の呼び出しじゃなくて、 String.Compare() メソッドの呼び出しになっちゃうほうが不気味かも f(^^;

投稿: biac | 2011年3月25日 (金) 06時59分

DateTimeで一瞬迷いましたが、何となく納得。
Nothingに初期値にようなものとか意味不明です…(汗)。

投稿: D.K. | 2011年3月25日 (金) 01時53分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [VB] Nothing と比較すると、どうなるか?:

» [VB] For i = 0 To i < 100 [biac の それさえもおそらくは幸せな日々@nifty]
魔界の仮面弁士さんの呟きより。 @Benshi_Orator: コードレビューなう。『For i = 0 To i 100』って何ぞ。それじゃあ、必ず1回(あるいは0回)しか実行されないよー。 [http://twitter.com/Benshi_Orator/statuses/124358187368460288]ぬ... [続きを読む]

受信: 2011年10月14日 (金) 08時24分

« [VB2010Express] えっと… スペースやタブを見えるようにするには…? | トップページ | [わんくま名古屋] 第17回は 4月 9日 - TDD ネタで喋ります »