はっしーのデジタルワーク

コンピュータ利用からデジタルに関わる様々なことを書き記します。

VisualBasic.netのヒント:And と AndAlso  

MicrosoftのVisualBasic.netで遭遇したヒントを書いていきます。
Visual Basic.netで開発されているプログラムの改修を依頼された時のことですが、条件によってエラーが発生する状態となり、かなり悩みました。備忘録として残す事にしました。

今回のテーマは、And と AndAlso の演算子の使い方の違いです。
Ifを使用した条件判断分ですが、And 演算子は、次のように使います。

If 〔A〕 And 〔B〕 Then
 (処理1)
else
 (処理2)
End If

このように実装した場合、「Aの判断が真(True)」かつ「Bの判断が真(True)」(両方の条件とも真の場合です)の時は、処理1を実行し、それ以外の場合は、処理2を実行します。
では、次のように AndAlso を使った場合は、どうでしょうか?

If 〔A〕 AndAlso 〔B〕 Then
 (処理1)
else
 (処理2)
End If

この場合も、意味は同じになります。<「Aの判断が真(True)」かつ「Bの判断が真(True)」の時は、処理1を実行し、それ以外の場合は、処理2を実行します。>となります。
では、どう使い分けるのでしょうか?

この2つの条件分岐では、〔A〕がFalseとなる場合は、〔B〕の真偽判定結果に関わらず(処理2)が実行されます。そして、AndAlso を使用した場合は、〔A〕がFalseの時点で〔B〕の判定がパスされ、ショートサーキットという動作をする論理演算子となります。AndAlso は、コンピュータにとって余分な仕事はしなくても良いですよといえる権限をもった命令です。And の場合は、地道に判断して結果を導き出しなさいという地味な命令となっています。

それでは、AndAlsoを使うメリットは何でしょうか?
一つは、〔B〕の判定処理に時間を要する場合です。if構文の判定ロジックが複雑になったり、繰り返し処理の中で大量の判定処理を行う事が必要な場合は、AndoAlsoを使って少しでも処理時間を削減して実行速度を速める事が出来ます。


もう一つは、〔A〕がFalseの場合、〔B〕の判定がエラー(Exception)発生する可能性がある場合です。この場合に、エラートラップを簡略化するためにAndAlsoを使います。
昨日はこの処理に嵌っていました。他人が作ったプログラムを改修する場合気を使います。製作者のポリシーを感じる部分は、極力元の思想を残すようにしています。

OrElse も同様です。
If 〔A〕OrElse〔B〕Then
とした場合は、「Aの判断が真(True)」または「Bの判断が真(True)」の時は、という意味ですが、AがTrueであるなら、Bの結果に影響されません。この論理演算子は、True として処理されます。Bの判定が行われない分、プログラムによっては、大幅に処理内容を削減する事ができます。また、エラートラップの記述を少なくする事ができ生産性は高まります。

Posted on 2014/04/28 Mon. 20:38 [edit]

category: VisualBasic.net

tb: 0   cm: 0

プロフィール

最新記事

最新コメント

FC2ブログランキング

月別アーカイブ

カテゴリ

カウンター

ユーザータグ

メールフォーム

最新トラックバック

リンク

検索フォーム

RSSリンクの表示

ブロとも申請フォーム

QRコード


▲Page top