|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
VBA for Excel 基礎編 VBA for Access VBAの文法 文法詳細 条件分岐 ループ処理 |
January 16, 2008. Wednesday. 演算子 演算子とは、変数などを関係付け、式を作るためのものです.....などというと、難しそうですが、算数における+、÷、=や「または」「かつ」などに当るものです。無しでプログラムを作るのは不可能に近いため、触った事のない人はいないかと思いますが、ざっと説明をして、注意点などをあげて行きたいと思います。 代入演算子 値を代入するのに使います。
「一覧と言いながら1つしかないじゃん」と突っ込まれそうですが、長さ0の配列もありますから、プログラマ&理系の人はなんとも思わないかと(笑)。代入演算子などと格好をつけていますが、ようは「イコール」です。数学のそれとは違い※1、左右を比較する意味ではなく、「右辺値を左辺に代入する」意味で用います。まぁ、これまでの記事を読み進んできた人ならおなじみですね。 ※1 厳密に言えば、数学においても、左右の等価性を比較することで、両者が置換可能である事から、「代入」という概念でも用いますけどね。プログラム上の代入の場合、等価でないものも代入できるというか、代入することで等価となるというか...。分かりにくいので初心者は無視してください。って、だったら書くなよとかいわないで。 算術演算子 数値の計算を行なう際に用います。
算術演算子とは算数のときに使う記号と同じです。気をつけなければいけないのは、「/」、「\」、「Mod」ぐらいでしょうか。演算子の評価には優先順位があり、例えば、answer = 5 * 2 - 2 * 3と書いた場合、乗算記号が優先され、結果としてanswerには4が格納されます。優先順位は数学で用いるものとほぼ同じと考えてよいでしょう。通常の情報系のページなら、ここで優先順位を一覧にするのですが、baristaはあえてやりません。理由は後ほど説明いたします。 連結演算子 文字列の連結を行なう際に用います。
上記の例のように左右の文字列を連結した結果を返します。ただし、「+」の利用には注意が必要です。「+」は算術演算子として用いられるため、左右が両方とも文字列でないと、連結演算子とみなされません。算術演算子として足し算を行なおうとし、一方が数値で無かった場合にはエラーとなります。以下に凡例を示します。
と上記のように、「+」による連結では連結結果が予想外のものとなることがあります(理解のうえで使う分には便利ではあるのですが)。という事で、単純な文字列連結の用途では「+」を使うのはやめ、極力「&」を利用するようにしましょう。 比較演算子 左右の変数、定数の比較を行なう際に用います。比較の結果が正しければTrueが、そうでなければFalseが返ります。
比較演算子は表のように左右を比較し、結果をTrue、Falseで返します。If文の評価に用いる事が多いでしょう。特に難しい演算子ではありませんが、いくつか注意点があります。 まず、「=」は代入演算子と表記が同じです。そのため、If a = b ThenのようにIf文内で書けば比較演算子ですが、プログラム中で普通にa = bと書くと代入演算子となります。ごちゃごちゃにならないよう、気をつけましょう。※以下初心者は読み飛ばしてください。プログラム中にa = b = cと書くとb = cが比較演算子で、bとcが同じならaにtrueが入るという、非常に分かりにくい動作をします。そういう表記はやめましょう。 次に「Is」は参照するオブジェクトが同じであるかどうかを比較します。例えば、僕が携帯電話705SHを持っていて、貴方も705SHを持っていたときに、両者は同じ商品ですが、別の物体です。この場合、「=」で比較するとTrueかもしれませんが、「Is」で比較するとFalseと評価します。なお、初心者が「Is」を効果的に使う局面は無いので、意味が分からなかった人は「Is」の存在を忘れてください。プログラムに慣れてから再学習しましょう。 最後に「Like」。Likeは文字列のあいまい比較を行なう演算子だと思ってもらえば良いでしょう。例えば、ゲームを探してFFシリーズを探したいなら、If gameTitle Like "FF*" Thenのように記述すれば"FF1"、"FF2" ..... "FF12"などは全てTrueとなります。一方、gameTitleが"DQ1"だったり、"aFF"だったりした場合はFalseとなります。他にも多くの比較方法があるので、パターンの記述方法について以下に列挙します。いろいろ試してみてください。
論理演算子 「かつ」、「もしくは」等の論理演算を行ないます。
ごちゃごちゃと書きましたが、And, Or, Not, Xorの4つだけでプログラムは書けます。多くは最初の3つで書けます。ImpやEqvなんてまず使いません。何故なら最初の3つの組み合わせで表現できるからです。取り合えず最初の3つでプログラムを書いてみて、必要に応じて残りを覚えれば充分です。 算術演算子と同様に論理演算子にも優先順位があります。例えばNotは最も優先度が高く、最初に評価されます。しかし、算術演算子の時と同様、ここでは触れません。他のサイトと同じことをしても意味がありませんから。詳しくは次項を参照下さい。 演算子の評価順について さて、もったいぶってきましたが、何故演算子の評価順に関する説明しなかったのかの種明かしをしましょう。例えば以下のようなプログラムを見てください。
「さて、処理は行なわれるでしょうか?」と尋ねられた時、あなたは何と答えますか?baristaの答えは「面倒くさいから知らん!」です。何で、こんなどうでも良い事に、記憶力と思考力を使わなければならないのでしょうか。努力する方向が間違っています。 演算子の評価順を制御する最も簡単な方法は、(1)括弧で括る、(2)必要であれば部分式を変数にまとめる、の2つです。上記の式はこのように理解しやすく書き換えることが出来ます。
どうでしょうか?「行をまたいで計算が行われる」と考える人なんて誰もいませんし、誰だって括弧内の式を先に評価するのではないでしょうか。このように書けば、演算子の優先順位なんて覚える必要がありません。 「演算子の評価順なんて常識だろ。読めない方が悪い」と言う人も居ますが、評価順を知っていても、大抵の場合括弧を付けた方が読みやすいのですから、積極的に括弧をつけ、長い式は分割するべきです。例え貴方には簡単でも、自分の後任のプログラマが評価順に詳しくなければ、せっかく作ったプログラムをめちゃくちゃにされてしまうかも知れません。 自分が評価順に詳しいからと、だらだらと式を書く人は、英語に詳しいからと書類を全部英語で書く人と同じです。優秀かも知れませんが、鼻について鬱陶しいだけ。このサイトでは「演算子の評価順を覚えるより、分かりやすい表記を心がける」事をお勧めします。 Copyright 2008 barista. All rights reserved. |
|