KEN's .NET |
[初心5] 演算子 〜 +や-の仲間 〜 |
|
0.演算子とは?演算子とは、例えば、+や-です。 以下のようなコードがあるとき、演算子+は、変数iの値に3を加算します。 そして、演算子=でその結果を再びiに代入します。 +のよう算術に用いられる演算子を算術演算子、=のように代入に用いられる演算子を代入演算子といいます。 他にもいくつか演算子の種類があります。次で演算子を紹介します。
Dim i As Integer
i = i + 3
1.さまざまな演算子下記の表に主要な演算子とその使用方法を載せました。
表1に掲載した以外にももう少し演算子がありますが(※1)、他の演算子についてはまた実際に必要な場面が出てきたときに解説します。 また、図1に挙げた例のコードは、以下のように書くこともできます。
Dim i As Integer
i += 3
これはある左辺の変数に何らかの演算を行って、再びその変数に結果を代入する場合に利用できる省略記法です。 Mod以外の算術演算子と文字列結合演算子でこの書き方ができます。ぜひ覚えておきましょう。
2.優先順位と丸括弧演算には優先順位があり、演算子によって決まっています。 算数か数学でも習いますが、例えば、掛け算は足し算より優先されます。 なので、10 + 2 * 3は16になります。足し算を先に行いたい場合は、(10+2) * 3のようにすると計算の順番を変更できます。 また、複数の条件を含むIf文では、And(Also)やOr(Else)を使いますが、例えば以下のような行があったとしましょう。
If a > 10 And a < 100 Or a > 120 And a < 200 Then
演算子の優先順位としては、<や>、And、Orの順となりますので、 条件が成立するのは、aが11〜99のとき、または、aが121〜199のとき、となります。 こういう条件文はややこしいので、括弧をつけて以下のようにするとよいでしょう。
If (a > 10 And a < 100) Or (a > 120 And a < 200) Then
演算子の優先順位を気にするぐらいならばんばん括弧を使いましょう!
3.AndとAndAlso、OrとOrElseの違いこれらは主に(※2)条件式で使用します。例えば、aをbで割った値が10より大きいときにxxxをするというようにしたい場合、 以下の図5のように書きたいところですが、bが0の場合、0で割ることはできないのでエラーが発生します。
If a / b > 10 Then
'xxx
End If
さて、この問題を解決するには、bが0でないときだけ、a / b > 10を調べるようにすればいいですね。 この条件をプログラミングを意識した言葉で書くと、「bが0でない、かつ、a / b > 10ならば」と書けますが、この場合、Andは使えません。
If (b <> 0) And (a / b > 10) Then
'xxx
End If
Andを使うと図6のような内容になりますが、この書き方の場合、(b <> 0)を検査して、bが0だった場合も、 次の条件式(a / b > 10)の検査に移ってしまい、エラーになります。 これを回避するには、図7のようにAパターン、Bパターンの2パターンあります。 Aパターンのような形を「入れ子」といいますが、この方法であれば、外のIf文を実行し成立したときのみ、中のIf文が実行されます。 Bパターンでは、図6のIf文の形のままAndをAndAlsoに変えただけですが、こちらは最初の条件が成立しなかった時点で、残りの条件も判断しません。 これによりbが0だったときも、後半の式(a / b > 10)は実行されないのでエラーになりません。これがAndとAndAlsoの違いです。OrとOrElseの場合も同様です。 余談ですが、このような評価の方法を短絡評価(ショートサーキット)といいます。
Aパターン
If (b <> 0) Then
If(a / b > 10) Then
'xxx
End If
End If
Bパターン
If (b <> 0) AndAlso (a / b > 10) Then
'xxx
End If
2.学んだことキーワード:演算子、丸括弧と優先順位、入れ子、短絡評価、\、^、Mod、Xor
(注釈) ※1 今回挙げていないものには、Is、TypeOf 〜 Is、AddressOf、GetTypeがあります。気になる方はヘルプをご覧下さい。 ※2 AndAlso、OrElse以外の論理演算子はビット演算にも利用します。今回はビット演算については解説しません。 |