はじめに
先日、私が参画しているプロジェクトでSQLのコードを読み解いている際に、Or と OrElse が使い分けられていることに気付きました。
「どちらも『または』を表す演算子なのに、何が違うんだろう?」
「処理の流れはどう変わるの?」
そんな疑問を持ち、実際に調べてみると、両者には条件式の評価方法に大きな違いがあることが分かりました。
理解してしまえば難しくありませんが、初めて学ぶと「短絡評価(ショートサーキット)」という言葉も出てきて、少し分かりづらく感じるかもしれません。
この記事では、Or と OrElse の違いを初心者向けにできるだけ分かりやすく、身近な例えやコード例を交えながら解説します。
この記事の対象読者
- VB.NETを学び始めた方
-
OrとOrElseの違いがよく分からない方 - 「なぜ実務では
OrElseが推奨されるの?」と疑問に思っている方
この記事が、同じ疑問を持った方の理解につながれば幸いです。
違いはこう!
-
Or:前半の条件がどうであれ、後半の条件も必ずチェックする(標準の論理和) -
OrElse:前半がTrueなら、後半のチェックを丸ごとスキップする(短絡評価/ショートサーキット)
無駄な処理を省いてプログラムの動作を速くしたり、エラーを防いだりできるため、
実務の現場では基本的に OrElse を使うコードの方が多く感じました
1. 例えで考える「Or」と「OrElse」
ネットショップで「配送料が無料になるか」を判定する場面をイメージ。
判定ルールは 「VIP会員である、または 注文金額が 5,000 円以上」 です。
もし、画面を操作しているお客さんが 「VIP会員(True)」 だと分かった時どうなるのか?
「VIP会員だから、文句なしで送料無料!」と即座に決まるため、注文金額をわざわざ計算して確認する必要はなくなる。
-
Or(生真面目タイプ)
VIP会員だと分かっても、「念のため、注文金額も計算してチェックしておこう!」と最後まで愚直にすべての条件を評価します。 -
OrElse(賢い省エネタイプ)
VIP会員だと分かった瞬間に「条件クリア!」と判定し、後半の金額計算をスキップして素早く次の処理に進みます。
2. コードで見る違い
シンプルなコードで比較してみると・・・
Dim isVipCustomer As Boolean = True
Dim totalAmount As Integer = 0 ' まだ計算前(0円)
' 【推奨】OrElse を使った場合
If isVipCustomer OrElse CalculateTotalAmount() >= 5000 Then
Console.WriteLine("送料無料が適用されます!")
End If
処理の流れ(OrElse の場合)
-
前半(
isVipCustomer)の評価
値はTrueです。 -
短絡評価(スキップ判定)
ORの条件では、どちらか1つでもTrueなら全体がTrueに確定します。そのため、OrElseは後半のCalculateTotalAmount()(重い計算処理)を実行せずに無視します。 -
判定完了
余計な処理を挟まず、即座に「送料無料が適用されます!」が出力されます。
これがもしただの Or だった場合、せっかくVIP会員と分かっているのに、わざわざ時間のかかる CalculateTotalAmount() という関数まで実行されてしまい、アプリの動きが重くなる原因になってしまいます。
3. エラー防止(安全性)の面でも大活躍
OrElse は、プログラムが途中で予期せず落ちるのを防ぐ安全装置としても機能します。
Dim user As UserInfo = Nothing ' ユーザー情報が存在しない(空っぽの)状態
' ユーザーが存在しない、または 名前の設定がない場合
If user Is Nothing OrElse user.Name = "" Then
Console.WriteLine("ユーザー情報が正しく設定されていません")
End If
もしここが Or だった場合、前半で user Is Nothing が True(ユーザーが存在しない)と確定したあとも、後半の user.Name を参照しようとしてしまい、NullReferenceException エラーが発生してプログラムが停止します。
OrElse であれば、前半が True になった時点で後半に触れることなく安全に If 文の中に入ることができます。
4. まとめ・比較表
| 演算子 | 名称 | 動作の特徴 | 主なメリット・デメリット |
|---|---|---|---|
Or |
論理和 | 常に両方の条件を評価する | 無駄な処理が走りやすく、エラーの原因になりやすい |
OrElse |
短絡評価(ショートサーキット) | 前半が True なら後半をスキップする |
処理速度が向上し、エラーを防げて安全 |
実務のコードで OrElse が使われているのは、「条件が1つでも成立したら、無駄なデータ取得や判定を行わずにスッと次の処理へ抜けるため」です。
And / AndAlso の関係と同じく、普段コードを書くときは OrElseの方が何かと便利なことがおおいというコトをおぼえておくといいかもしれません
