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

第14回 論理でシンプル&エレガント

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

今回から数回にわたって,前回までとはうって変わって新しいことを学びます。それは論理の数学です。「論理?高校数学の教科書には出てこなかったよ!」大丈夫,ご心配なく。高校で学んだ数学の方がよっぽど難しいんです。論理の数学はとってもシンプルです。

なぜ論理の数学を学ぶのでしょうか。それはプログラムの動きをコントロールするために必要不可欠だからです。論理が適切に組み立てられていなければ,プログラムは目的通りに動きません。論理の数学はプログラマの必須技術です。

更に,論理の数学をしっかり身につけると,プログラムをシンプルでコンパクトに,そして高速にできます。例えて言えば,論理に関する知識・技術を知ったプログラマは,大工としてひとつの作品がなんとか作れるようになった,という段階に当たるかもしれません。論理の数学を自在に使いこなすプログラマは,無駄を省いてシンプルかつエレガントな仕事をする名人大工に例えられます。

とりあえず動くプログラムを作ることが出来るという段階から,シンプルかつエレガントなプログラムを作ることが出来るプログラマへ,今回から始まる論理に関する学習でステップアップしましょう。

図14.1 Simple is Best !

図14.1 Simple is Best !

論理とは

論理とは,ある条件が正しいか,正しくないか,成り立つか,成り立たないかということを取り扱うものです。

正しいとか,成り立つといったことを,論理の言葉で(しん)といい,正しくないとか成り立たないといったことを(ぎ)といいます。真や偽といった値のことを論理値といいます。ブール値と呼ぶ流儀もありますが,論理値の方が直感的でわかりやすいと思いますので,この連載では論理値という呼び名を用います。Java言語で論理値を格納する型はboolean型(「ブーリアンがた」と読みます)です。こちらはJava言語の変数の型として一般的になっている名称なので,論理型と呼び換えず,そのまま用います。boolean型ではtrueが真を表し,falseが偽を表します。

プログラムの実行中には変数の値が様々に変化します。変数の値の変化に応じて条件式の論理値が変化します。この論理値の値に応じた処理をプログラムに書き表します。プログラマの仕事は,このような作業の積み上げです。

数の大小とか,文字列の等しい・等しくないといった条件を表した文章のことを命題といいます。命題とは,意味に不明なところのない文章です。命題には成り立つものと成り立たないものがあります。命題は真か偽の論理値を持つのです。

プログラムで命題を取り扱う場合には,式の形で書き表します。そのようなものを条件式といいます。例えば次のように命題を条件式に書き換えることが出来ます。

命題「iは0より大きな数である。」
条件式 i > 0

例えば,int型変数iの値が1のとき,i > 0という条件式の演算結果はtrue,i < 0やi == 0という条件式の演算結果はfalseになります。

条件式には比較演算子連載第3回で紹介しました)の他に,論理の働きを持たせた論理演算子を用います。論理演算子を用いた条件式のことを論理式ともいいます。例えば次のような命題は論理演算子を含む条件式,すなわち論理式に書き換えることが出来ます。

命題「iもjも0より大きな数である。」
条件式(論理式) (i > 0)&(j > 0)

&というJava言語の論理演算子は「AかつB」「かつ」を表す論理記号です。「かつ」とは「両方とも」という意味で,アンドと読みます。このような論理記号については次回以降でじっくりと学習しますので,ここでは紹介する程度の説明にとどめます。

論理式は一般の計算式とは異なる計算法則を使って変形できます。論理式を変形するための公式や法則をまとめて論理代数といいます。

プログラミング言語には,命題とその真偽に応じた処理を記述するための命令があります。それらを条件判断文と言います。ですから,論理の数学をきちんと使えるようになって初めて,条件判断文の能力を十分に活用できるようになるのです。

著者プロフィール

平田敦(ひらたあつし)

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

コメント

コメントの記入