プログラミングの醍醐味! Javaで“条件式”を理解する【改訂版】Eclipseではじめるプログラミング(3)(1/3 ページ)

これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります

» 2009年02月25日 00時00分 公開
[小山博史株式会社ガリレオ]

プログラミングの醍醐味「条件分岐処理」とは?

 インターネット上のショッピングWebサイトなどで、「商品を5000円以上購入すると、送料が無料になる」といったサービスをよく見掛けませんか? この場合、お客さまへ請求する金額の総額は「商品を5000円以上購入するかしないか」によって変わります。このように、ある条件によって計算手順が変わるような処理のことを「条件分岐処理」といいます。

 今回はこういったプログラムを作成するのに必要な、if文switch文などについて解説します。 EclipseでJavaプログラミングを始める準備がまだの方は、連載第1回の「Eclipse 3.4で超簡単Javaプログラミング基礎入門」で準備しておいてください。

数学の授業で習った「条件式」を覚えていますか?

 前述の例では、「商品を5000円以上購入するかしないか」によって処理が変わります。この処理が変わる判断基準となるものを「条件」といいます。もう少し詳しくいうと、「お客さまは商品を5000円以上購入する」という部分が“条件”になります。数学的には、この条件は“式”(条件式)として表現できます。

 例えば、お客さまが購入する商品の総額を「 x 」とすると、この条件は「x ≧ 5000」という式で表すことができます。この条件式に対して、実際に「お客さまが商品を6000円分購入している」場合は、条件式のxに6000を代入すると、「6000 ≧ 5000」となるので、条件が成り立ちます。このとき、この条件式の評価値は“”(true)となります。

 逆に「お客さまが商品を3500円分購入している」場合は、この条件式は「3500 ≧ 5000」となるので、条件が成り立ちません。このとき、この条件式の評価値は“”(false)となります。

Javaにおける条件式

 こういった条件式やその評価結果をプログラムで扱えるようにするために、Javaでは論理型boolean)や、評価結果が論理値となる演算子が用意されています。また、真を表すtrueと偽を表すfalseも論理値リテラルとして用意されています。論理型や演算子、リテラルについて復習したい読者は、前回の記事「Javaで一から理解するプログラムの変数と演算子」を参照してください。

 さらにJavaでは、boolean型と似たような型で、Booleanクラスというクラスがあります。boolean型の値とBooleanクラスは相互に簡単に変換ができます。この型を使って条件式を指定することもできます。

 プログラムにおいて処理の流れを制御するには、条件をどのように指定するかということが重要になってきます。条件は、評価結果が論理値となる条件式で表現するということをここで理解しておきましょう。

 条件によって処理の流れを変えるには、if文を使います。if文には、if-then文if-then-else文の2種類があります。順番に見ていきましょう。

最も単純な分岐「if-then文」

 「ある条件が成り立つときだけある処理をしたい」という単純な条件分岐の場合は、if-then文を使います。if-then文は次のように記述します。

if (条件式) 文

 直感的に処理の流れを理解できるように図で表してみると、図1のようになります。図では、前処理の後に条件式の判定をして、条件式が“真”の場合は“処理1”を実行してから“処理2”を実行しますが、条件式が“偽”の場合は“処理1”を飛ばして処理2を実行するという処理の流れを示しています。このうち赤線で囲んだ部分がif-then文と対応することになります。

図1 if-then文 図1 if-then文

参考 「処理の流れも表せるUMLとは?」

本連載では処理の流れを表すのに、UML(Unified Modeling Language)という表記法のアクティビティ図フローチャート)を使っています。UMLを使うことによりオブジェクト指向プログラムの設計を図で表せるので、プログラムを直感的に理解しやすくなります。

UMLの詳細は本連載の範疇(はんちゅう)ではないので説明しませんが、興味のある読者は下記記事などを参考にしてみてください。


 ここで、処理を複数の文を使って記述したい場合があります。この場合はブロックを使って、複数の文を1つのブロック文にします。複数の文を中括弧({ })で囲むと、ブロックとなります。前述のif-then文をブロック文で書き直すと次のようになります。ここでは1つしか文がありませんが、中括弧({ })内には複数の文を記述できます。

if (条件式) {
    文
}

if-then文をJavaで書いてみよう!

 それでは、単純なサンプルプログラムを動作させてみましょう。連載第1回と同様にEclipseを起動し、パースペクティブを[Java]に切り替えておいてください。パースペクティブが[Java]になっていないときは、メニューの[ウィンドウ]→「パースペクティブを開く」→[Java]を指定すれば、切り替えることができます。今回は次のような手順で新規にクラスを作成することにします。

  1. [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
  2. 表示されるポップアップメニューで[新規]→[クラス]を指定
  3. 表示される[新規Javaクラス]ダイアログで、[名前]にSample30と入力
  4. 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
  5. [終了]ボタンをクリック

コラム 「Eclipseをより良くするためのUsage Data Collectorとは?」

Eclipseを起動すると、[Usage Data Upload]というダイアログボックスが表示されることがあります。これは、Eclipse 3.4に「UDC(Usage Data Collector)」と呼ばれる機能が含まれているからです。直訳すると、「利用データ収集機能」となります。

なぜこのような機能が搭載されているかというと、Eclipse 3.4利用者がどのようにEclipseを使っているのかを集めることにより、Eclipseの開発をより良くできるからです。「Eclipseの開発へ協力するために、この機能を有効にする」というのは、Eclipseプロジェクトへ貢献する立派な方法の1つです。

デフォルトでは無効となっているため、ダイアログを表示して、ユーザーにこの機能を有効にするかどうか問い合わせているので、協力できる方は、[Upload now]などを選択して利用データを提供してはいかがでしょうか。


 出来上がったSample30クラスにコードを追加して、次のリスト1を作成してください。

リスト1
public class Sample30 {

    /**
    * @param args
    */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        if (true) System.out.println(true);
        if (false) System.out.println(false);

        boolean b;
        b = true;

        if (b) {
            System.out.println(0);
            System.out.println(1);
            System.out.println(2);
        }
    }
}

 最初のif文では条件式がtrueなので、「System.out.println(true);」が実行されます。次のif文では条件式がfalseなので、「System.out.println(false);」は実行されません。次に、boolean型の変数bを用意してtrueを代入しています。3つ目のif文では、この変数を条件式として使っています。bの値がtureなので、この場合はブロック内の3つの処理が実行されます。これらのことから、実行結果は次のようになります。

リスト1の実行結果
true
0
1
2

条件を変えてみると……

 次に、リスト1を少し変更して、if文の条件式でtrueをfalseにし、falseをtrueとし、変数bの値をfalseに変更して、どの処理が実行されるかを確認してみましょう。

リスト2
public class Sample30 {

    /**
    * @param args
    */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        if (false) System.out.println(true);
        if (true) System.out.println(false);

        boolean b;
        b = false;

        if (b) {
            System.out.println(0);
            System.out.println(1);
            System.out.println(2);
        }
    }
}

 すると、実行結果は次のようになります。最初のif文では条件式がfalseなので、「System.out.println(true);」が実行されません。次のif文では条件式がtrueなので、「System.out.println(false);」が実行されます。3つ目のif文では、変数bがfalseであるため、ブロック内の処理が実行されません。

リスト2の実行結果
false

 以上で、条件が成立するときだけ処理を実行するには、if-then文を使えばよいことが分かりました。

 次ページでは、複雑な条件分岐もできる「if-then-else文」や関係演算子と等値演算子について説明します。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。