人生と同じ? プログラムの式と演算子、制御文を学ぶiOS SDKで始めるObjective-C入門(5)(3/4 ページ)

» 2013年06月18日 18時00分 公開
[平井祐樹,クラスメソッド]

選択文/条件文

 選択文は、ある条件に応じてプログラムの流れを分岐させるために使用します。選択文にはif文switch文の2つがあります。

if形式

 if文は最も基本的な選択文です。書式を見てみましょう。

if (条件式) {
    文;
}

 これを日本語で表すと「条件式が正しい場合に文を実行する」となります。ここで条件式が正しいといいました。これをObjective-C的にいうと、条件式の値を0以外の場合を「真(しん)」、0の場合を「偽(ぎ)」といいます。ですので、いい換えると、「条件式が真の場合に文を実行する」となります。

 では、具体的なプログラムを書いてみましょう。以下のプログラムは変数numに代入された値が10以上であれば、コンソールにログを出力するプログラムです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    int age = 20;
    if (age >= 20) {
        NSLog(@"%d歳は成人です。", age);
    }
}

 このプログラムを実行するとコンソールに「20歳は成人です。」と表示されたかと思います。今度は変数numに10以下の値を入れてみましょう。

- (void)viewDidLoad
{
    [super viewDidLoad];
    int age = 15;
    if (age >= 20) {
        NSLog(@"%d歳は成人です。", age);
    }
}

 このプログラムを実行しても何も表示されないはずです。

 それでは、変数ageが20未満の場合もコンソールに表示したい場合には、どうすれば良いのでしょうか。

if-else形式

 そこで登場するのがif-else形式です。この形式を使うと条件式が偽の場合にも任意の形式が実行できるようになります。

if (条件式) {
    文1;
} else {
    文2;
}

 これは「条件式が真の場合は文1を、偽の場合は文2を実行する」となります。先ほどのプログラムをif-else形式を用いて拡張してみましょう。

- (void)viewDidLoad
{
    [super viewDidLoad];
    int age = 15;
    if (age >= 20) {
        NSLog(@"%d歳は成人です。", age);
    } else {
        NSLog(@"%d歳は未成年です。", age);
    }
}

 このプログラムを実行するとコンソールに「15歳は未成年です。」と表示されるはずです。

if-else if-…else形式

 もっと細かく条件を指定したい場合は、if-else if-…else形式を使用します。

if (条件式1) {
    文1;
} else if (条件式2) {
    文2;
・
・
・
} else {
    文n;
}

 早速、サンプルを見てみましょう。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    int age = 16;
    if (age < 6) {
        NSLog(@"%d歳は赤ちゃんです。", age);
    } else if (age < 12) {
        NSLog(@"%d歳は小学生です。", age);
    } else if (age < 15) {
        NSLog(@"%d歳は中学生です。", age);
    } else if (age < 18) {
        NSLog(@"%d歳は高学生です。", age);
    } else if (age < 22) {
        NSLog(@"%d歳は大学生です。", age);
    } else {
        NSLog(@"%d歳は社会人です。", age);
    }
}

 このようにすることで、if文に条件式をいくつでも指定できます。

switch文

 分岐が多くなると非常に見づらいですし1つでも書くのも面倒です。そういうときはswitch文を使用しましょう。switch文はif文と同様、選択文の1つで、条件式の結果によって複数に分岐する場合に有効です。

if (条件式) {
    case 整数定数1:
        文1;
        break;
    case 整数定数2:
        文2;
        break;
    ・
    ・
    ・
    default:
        文n;
        break;
}

 条件式は整数を返す式で指定しなければなりません。この条件式の整数値がcaseに書かれている整数定数と等しい場合に該当する処理を行います。条件式の整数値がどの定数とも等しくない場合はdefaultの後に書かれる処理が実行されます。簡単なサンプルを見てみましょう。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    int num = 2;
    
    switch (num) {
        case 1:
            NSLog(@"num == 1のときだけ実行される");
            break;
        case 2:
            NSLog(@"num == 2のときだけ実行される");
            break;
        case 3:
            NSLog(@"num == 3のときだけ実行される");
            break;
        default:
            NSLog(@"上記以外のときに実行される");
            break;
    }
}

 このプログラムを実行するとコンソールに「num == 2のときだけ実行される」と表示されます。ここで「break;」と書かれた文があります。

 また、caseは連続して書くこともできます。早速先ほどのif-else if-…else形式のサンプルをswitch文で書き直してみましょう。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    int age = 16;
    
    switch (age) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            NSLog(@"%d歳は赤ちゃんです。", age);
            break;
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
        case 11:
            NSLog(@"%d歳は小学生です。", age);
            break;
        case 12:
        case 13:
        case 14:
            NSLog(@"%d歳は中学生です。", age);
            break;
        case 15:
        case 16:
        case 17:
            NSLog(@"%d歳は高学生です。", age);
            break;
        case 18:
        case 19:
        case 20:
        case 21:
            NSLog(@"%d歳は大学生です。", age);
            break;
        default:
            NSLog(@"%d歳は社会人です。", age);
            break;
    }
}

 switch文の中に「break;」がありますが、これも制御文の1つです。break文については後で詳しく説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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