はじめMath! Javaでコンピュータ数学

第3回 記号の工具箱をひっくり返そう[前編]

この記事を読むのに必要な時間:およそ 4 分

前回は,数学とJava言語では数の分類名に同じ名前が用いられていても,取り扱える数値の範囲や意味に違いがあることを確認しました。プログラミング言語で使える数値型は案外窮屈なものなのです。

さて,今回と次回は演算記号を取り上げます。数学で用いる様々な演算記号が,Java言語のソースコードではどのように記述されるのかを確認します。紹介する演算記号がたくさんあるため,2回に分けて学びます。今回は記号たちを机の上にひろげて,1つひとつをながめてみましょう。そして次回,それぞれの記号を使ってみます。数が多いことに及び腰にならないで下さいね。どれも皆とてもシンプルなものばかりです。それでは,記号の工具箱を開くとしましょう※1)。

図3.1 工具箱を開くプログラマ。工具箱は演算記号の宝箱

図3.1 工具箱を開くプログラマ。工具箱は演算記号の宝箱

※1
今回ここで紹介する記号の他に,集合・論理・順列・組合せ・微積といったよく使う記号があります。集合や論理については,この連載の後半で改めて紹介する予定です。

各種の演算記号

四則演算

四則演算は最も基本的な演算です。それぞれ,加算・減算・乗算・除算といいます。表3.1に四則演算記号の一覧表を示します。Java言語では乗算に * (スター)を,除算に / (スラッシュ)を用います。プログラミング言語では使える文字種に制限があるため,数学とは別の記号を割り当てられています。

表3.1 数学とJava言語の四則演算記号

 数学Java言語
加算+
減算-
乗算×*
除算÷/

剰余演算

剰余演算とは,除算の余りを求める演算です。剰余演算は,数学では % や mod (moduloの略)を用います。Java言語では, % (モジュロと読む)を用います。

c = a%b

と書くと,

a ÷ b = x … c

という除算の剰余が c に代入されるのです。

高校までの数学では剰余を求めるために特に記号を与えられませんでした。しかし,実生活の中には,剰余を求められると便利な場合が多くあります。ひとつ例を示しましょう。「現在時刻は14時です。これから200時間後は何時でしょうか。」という問題。剰余記号を用いた演算ができればシンプルに記述できます。計算式は (200 + 14)%24 = 22 となり,答えは22時です。たった一行で表現できました。しかし,剰余記号を用いなければ, (200+14)/24 = 8.916…,(200+14)-24×8 = 22 。細かいことを言えば,先の除算の結果を整数化する手続きが必要です。

等号

数学では,等号 = (イコールと読む)は,等号を挟んだ式の左側(左辺)と右側(右辺)「等しい」ことを意味しています。同様に,非等号(ノットイコールと読む)は左辺と右辺が「等しくない」ことを意味します。

プログラミング言語で等号は,左辺と右辺が「等しいかどうか」という用いられ方をするときと,右辺の計算結果を左辺に代入する」という用いられ方をするときがあります。この2つの用途を区別するためにJava 言語では,「等しいかどうか」というときには == ,「代入する」というときには = を用いて区別しています。「等しくないかどうか」の場合は != と書きます。以上のことを表3.2にまとめました。

表3.2 数学の等号とJava 言語の代入・比較演算子

数学Java言語
  代入=
等しい=等しいかどうか==
等しくない等しくないかどうか!=

Java言語の算術演算子

Java言語は表3.3のような算術演算子を持っています。算術演算子には,これまでに紹介した四則演算子,剰余演算子の他に,代入演算子,単項演算子があります。

表3.3 Java 言語の算術演算子

名称演算子
四則演算子,剰余演算子+, -, *, /, %
代入演算子= ,+=, -=, *=, /=, %=
単項演算子++, --

代入演算子とは,右辺の計算結果を,左辺に置かれた変数の値にするための記号です。プログラミングの初心者にとって,この代入の理解がどうも鬼門になるようです。数学では,イコールを挟んで右辺と左辺は等しいという意味です。左右の辺に現れる変数は当然同じ値をとります。ところが,次の式を見てください。

i = i + 1;

プログラミング言語では,右辺の計算結果によって左辺の値が変わります。右辺の変数 i の値と,左辺の変数 i の値は異なるのです。この式を見て,「プログラミング,やーめた」という人を何人も見てきました※2)。もし,あなたがそうなら,「イコールは,等号ではなくて,代入演算子です!」と3回唱えましょう。右辺の計算結果が左辺に代入されるのです。もし,この式の以前の変数 i の値が5ならば,この式の実行後, i の値は6になります。そういうことなんだ,と信じてください。

i = i + 1 のように短い式なら良いのですが,ソースコード中の変数名というのは「値の意味を簡潔かつわかりやすく示すもの」になっています。短いほうがプログラマにとって入力が楽ですが,あまりに短いと意味不明になって逆に苦労をします。このため,プログラマは一般的に変数名をあまり短いものにしませんし,大文字・小文字・記号等を様々に織り交ぜます。数式もプログラムも長くなりがちです。

そのため,少しでも入力の手間を減らし,式を短くして一覧性をよくするために代入演算子( +=,-=,*=,/=,%= )が作られました。代入演算子を使うと,例えば someValue = someValue + 1は,someValue += 1 と簡潔に書けるのです。

さらに,この「1増やす(インクリメント)」「1減らす(デクリメント)」といった操作は,プログラムの中でたびたび出てきますので,単項演算子( ++ , -- ) が作られました。 ++i と書くと,変数 i の中身は1増えます。 --i と書くと,1減ります。 i++ や i-- も同様に理解して結構です。本当は,少し違いがあるのですが,その違いがプログラムに必要になったときには,多分ご自分ですぐに理解できる力を得ています。今はそういうものがある,というだけにしておきます。

※2
多くの人は,横書きに書くときに,左から右に意味が流れるのが自然と感じるでしょう。 i = i + 1 でつまづく人は,意味の流れが右から左であることに違和感を拭えないのではないでしょうか。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。

コメント

コメントの記入