【入門編】初心者向け:VB.NETの「IsNot Nothing」と「Is Nothing」のスマートな書き方:可読性を高めるnull判定の定跡 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

こんにちは!開発現場を渡り歩いてきたシニア・アーキテクトの私です。

Excelのマクロ(VBA)や、なんとなく形にしたコードから一歩抜け出して、「本格的なVB.NETの書き方をマスターしたい!」と意気込んでいるあなたへ。素晴らしい着眼点ですね。

今回は、VB.NETでのプログラミングにおいて避けて通れない、「null(値がない状態)の判定」についてお話しします。
初心者の方がやりがちな冗長な書き方を卒業し、プロっぽくて読みやすい「スマートな定跡(定石)」を一緒に身につけていきましょう。

ここをクリアすれば、あなたの書くコードの美しさは一段と跳ね上がりますよ。さあ、扉を開けましょう!

1. なぜ「null判定」でつまずくのか?

プログラムを書いていると、「この変数、ちゃんと中身が入っているかな?」と確認したい場面に何度も遭遇します。文字列や、データベースから取ってきたデータ、画面上のボタンなどですね。

VB.NETでは、この「中身が何もない状態」を `Nothing`(ナッシング) と呼びます。

初心者の方が最初にやりがちなのが、C#やJavaなどの他言語の知識が混ざってしまったり、以下のような「なんだかモヤッとする書き方」をしてしまうことです。

.net
‘ 【避けてほしい、ちょっと惜しい書き方】
If myString = Nothing Then
‘ 処理
End If

「あれ? `=(イコール)` じゃダメなの?」と思った方、鋭いですね。実はこれ、VB.NETの世界ではバグの温床になったり、パフォーマンスの無駄遣いになったりする原因なんです。

2. 変数の比較は「=」ではなく「Is」を使え!

VB.NETには、オブジェクトや変数の「中身が空っぽか?」を調べるために特化した、専用の演算子が用意されています。それが `Is` 演算子 です。

「=」は、数値の比較(`5 = 5` など)に使いますが、`Nothing`(参照先がないこと)を調べる時は `Is Nothing` という専用のフレーズを使います。

「Is Nothing」の基本形

.net
Dim userName As String = Nothing

‘ 【正しい定跡】中身が入っていない(Nothingである)かを調べる
If userName Is Nothing Then
Console.WriteLine(“名前が入力されていません。”)
End If

`=` ではなく `Is` を使う。これがVB.NETにおける第一の鉄則です。
なぜなら、`=` は「値の比較」を行うのに対し、`Is` は「メモリ上の実体が同じか(参照が空か)」というポインタ的な本質を安全に比較してくれるからです。

3. 「IsNot Nothing」で逆転の発想を手に入れる

さて、ここからが今回のメインディッシュです。
「中身が入っていないとき」ではなく、「中身が入っているとき(=Nullじゃないとき)」に処理をしたい場合、あなたならどう書きますか?

多くの初心者はこう書きます。

.net
‘ 【ちょっと冗長な書き方】
If Not (userName Is Nothing) Then
Console.WriteLine(“こんにちは、” & userName & “さん!”)
End If

……うーん、`Not` が入って、括弧があって、少し読むのに脳のメモリを使いますよね。コードが長くなればなるほど、こういう「否定の否定」はバグの温床になります。

ここで登場するのが、VB.NETが誇る最高にスマートな構文、`IsNot` 演算子 です!

.net
‘ 【超スマートな定跡】中身が入っている(Nothingではない)かを調べる
If userName IsNot Nothing Then
Console.WriteLine(“こんにちは、” & userName & “さん!”)
End If

`Is Not` ではなく、ひとまとめにして `IsNot` です。
英語の「is not」をそのままくっつけたようなこの構文、声に出して読んでみてください。「イズ・ノット・ナッシング」。すごく自然で、まるで人間が話しているようにスッと頭に入ってきませんか?

これが、可読性を極限まで高めるVB.NETの美しさです。

4. 実践!現場で使える安全なコード例

それでは、実際の開発現場でそのまま使えるサンプルコードを見てみましょう。
ボタンが押されたときや、データ処理を行うメソッドの一連の流れを想定しています。

.net
Public Class UserProcessor

‘ ユーザー名を受け取って挨拶を出力するメソッド
Public Sub ProcessUser(ByVal userName As String)

‘ 1. まず、データが空っぽ(Nothing)でないかを「IsNot」でスマートに弾く
If userName IsNot Nothing Then
‘ 中身がある場合の処理(安全にビジネスロジックを実行)
Console.WriteLine(“処理を開始します: ” & userName)

‘ さらに文字列が空文字(””)かどうかもチェックすると完璧
If userName.Trim() <> String.Empty Then
Console.WriteLine(“有効なユーザー名です。”)
End If

Else
‘ 2. 万が一の「Nothing」だった場合の例外処理やガード節
Console.WriteLine(“エラー: ユーザー名が指定されていません。”)
End If

End Sub

End Class

コードのポイント

  • ガード節としての活用: メソッドの最初で `If … IsNot Nothing Then` を使うことで、「正常系」の処理をインデントの奥深くに入れ込まず、浅い階層でスッキリと保つことができます。
  • 意図の明確化: 「何が存在しているときに動くのか」がコードの見た目そのままに表現されているため、数ヶ月後に自分が見直したときも、チームのメンバーが読んだときも、一瞬で意図が伝わります。

5. 陥りやすい罠:文字列の空(`””`)と `Nothing` の違い

最後に、VB.NET初学者が必ずと言っていいほどハマる「深い沼」について補足しておきます。

  • `Nothing`: 変数に「箱」自体はあるけれど、中身が一切割り当てられていない状態(メモリ上に存在しない)。
  • `””` (空文字 / String.Empty): 「箱」の中に「文字が0文字の空っぽのデータ」が入っている状態。

つまり、`userName IsNot Nothing` と判定しても、変数の中身が `””`(空文字) である可能性はゼロではありません。

実務では、この両方を同時にチェックすることが求められます。そんなときは、.NETが用意してくれている便利なメソッド `String.IsNullOrEmpty` を使うのがプロの技です。

.net
‘ Nothingでもなく、空文字でもないことを一撃で判定する神メソッド
If Not String.IsNullOrEmpty(userName) Then
‘ ここに入ってきたら、userNameは完全に安全で実体がある!
Console.WriteLine(userName.ToUpper())
End If

まとめ

いかがでしたでしょうか? 今回のポイントをギュッと凝縮して振り返ります。

1. `Nothing` との比較には `=` ではなく `Is` 演算子を使う! (`Is Nothing`)
2. 「非Null(値が入っている)」を判定する時は、最高の糖衣構文 `IsNot` を使え! (`IsNot Nothing`)
3. さらに安全性を高めるなら `String.IsNullOrEmpty` も組み合わせよう!

ここをクリアすれば、あなたの書くVB.NETコードは見違えるほど洗練され、エラーに強い堅牢なものになります。

「たかが条件分岐、されど条件分岐」。こうした細部のこだわりこそが、あなたを「マクロの記録から脱却した本物のエンジニア」へと引き上げてくれます。

基本をマスターしたあなたなら、もう大丈夫。自信を持って次のコードへ進んでくださいね!

タイトルとURLをコピーしました