【連載9】Javaプログラミングの基本 選択(if文)

Javaに限らずほとんどのプログラミング言語おいて基本となるのが基本制御構造です。

基本制御構造とは「順次」「選択(分岐)」「繰り返し(反復、ループ)」の3つのことを指します。

 順次:処理が順番に実行される構造
 選択:条件によって分岐する構造
 繰り返し:処理を繰り返す構造

この3つの構造がプログラミングの基本となり、どのようなプログラムでも、この3つの基本形に分解できるようになっています。
今回の記事では、そのうちの「選択(分岐)」について見ていきます。

条件による分岐処理

「選択」とは条件によって処理を分岐させることを言います。

「選択」と呼ぶことは今では古い?ようで、最近では「分岐」と呼ばれることも多いようです。

ただ、呼び方はどちらでもよく、条件を指定して、プログラムの流れを分岐させるために用いる構造であることには変わりありません。

Javaで条件分岐を行うには以下の命令文を使用します。

条件分岐を行う命令文

・if文
・switch文

どちらも上から順に実行される処理を条件によって分岐させることができます。

if文を使った条件分岐

if文は指定した条件に一致するかどうかで処理を分岐させることができる構文です。

if ( 条件式 ) {
条件に一致したときに実行する処理
}

if文では、条件式を評価(条件に一致したかどうかを判断)し、条件式ではtrue、falseのboolean型の値を返します。

条件に一致した場合はtrue、一致しなかった場合はfalseとなります。

そして、trueが返された場合は、ifブロックの中が実行され、falseであれば実行されないというわけです。

ここで以下のサンプルコードを見てください。

public class Sample09_01{
    public static void main(String[] args){
        if( true ){
            System.out.println("True");
        }
    }
}
True

条件式でtrueと自ら記述しているので、このプログラムを実行すれば必ず「True」という文字列が出力されます。

比較演算子による評価

前述のサンプルのように条件式にtrueやfalseと直接記述してしまうと、条件分岐にはなりません。

それはつまり、そのような書き方でif文を使用する意味はないということです。

条件分岐は、値の大小比較など、演算の結果によって処理を分岐させることではじめてその効力を発揮します。

そのように条件式にて比較を行う際に使われるのが比較演算子です。

比較演算子には以下のような種類があります。

演算子意味記述例
<左の値が右の値より小さい場合にtrueを返し、大きい又は等しい場合にはfalseを返す。x < y;
>左の値が右の値より大きい場合にtrueを返し、小さい又は等しい場合にはfalseを返す。x > y;
<=左の値が右の値以下の場合にtrueを返し、大きい場合にはfalseを返す。x <= y;
>=左の値が右の値以上の場合にtrueを返し、小さい場合にはfalseを返す。x >= y;
==左の値が右の値と等しい場合にtrueを返し、異なる場合にはfalseを返す。x == y;
!=左の値が右の値と異なる場合にtrueを返し、等しい場合にはfalseを返す。x != y;

比較演算子は演算子をはさんで左の値と右の値を比較し、その結果をtrueかfalseで返します。

では、比較演算子をif文で使用したサンプルコードを記します。

public class Sample09_02{
    public static void main(String[] args){
        int a;
        a = 5;
        if( a < 10 ){
            System.out.println("True");
        }
    }
}
True

if文の条件式では、変数aの値が10より小さいかどうかを判定しています。

この例では変数aの値は5なので条件に一致し、trueが返され、ifブロック内の処理が実行されます。

if-else文により条件分岐を増やす

前述のサンプルでは、変数aの値が10より小さければ「True」と出力されますが、大きければ何の処理もされません。

ただ、条件に一致しなかった場合にも何らかの処理を行いたいケースもあります。

そのようなケースでは、if-else文を使用します。

if ( 条件式 ) {
条件に一致したときに実行する処理
} else {
条件に一致しないときに実行する処理
}

では、こちらもサンプルコードを記します。

public class Sample09_03{
    public static void main(String[] args){
        int a;
        a = 20;
        if( a < 10 ){
            System.out.println("True");
        }else{
            System.out.println("False");
        }
    }
}
False

if-else if-else文によりさらに条件分岐を増やす

ひとつの条件に一致したとき、一致しなかったときだけでなく、もっと条件式を増やし、処理を分岐させたいこともあります。

その場合は、if-else if-else文を使用します。

if ( 条件式1 ) {
条件1に一致したときに実行する処理
} else if( 条件式2 ) {
条件2に一致したときに実行する処理
} else {
すべての条件に一致しないときに実行する処理
}

else ifブロックはいつくでも作れます。つまり、if-else if-else文を使えば、実質的にいくらでも条件式を増やすことができます。

public class Sample09_04{
    public static void main(String[] args){
        int a;
        a = 25;
        if( a < 10 ){
            System.out.println("aは10より小さい");
        }else if( a < 20 ){
            System.out.println("aは20より小さい");
        }else if( a < 30 ){
            System.out.println("aは30より小さい");
        }else{
            System.out.println("aは30以上");
        }
    }
}
aは30より小さい

まとめ

本記事では、条件による分岐処理を行いたい場合に用いるif文の使い方について見てきました。

if-else if-else文を使うことで、いくらでも分岐を増やすことができ、プログラミングの幅を広げることが可能です。

しかし、今回見てきたサンプルでは、固定の値を使っての分岐を行っており、if文を使う意味がまったく見えてこなかったのではないでしょうか。

まったくもってその通りであり、今回のサンプルのようなif文の使い方では実用性がありません。

本来、キーボードやファイルなど、何らかの入力によって取得した値を用いて比較することで、意義のある条件分岐を実現できます。

さらに言えば、論理演算子を使うことで、より細かな条件式を作ることもできます。

次回の記事では、その辺りのことを詳しく解説していきます。