[iOS] 条件分岐 if | プログラミング初心者向けObjective-C入門

2013/04/18

今回は条件分岐です。

以前にプログラムの流れは大きく分けて3つと書きました。

1. 逐次実行(上から順番に実行していく)
2. 条件分岐(もし○○だったらAにいく, そうじゃなかったらBにいくなど)
3. 繰り返し(ループ)

今回はその2番目になります。

条件分岐はifを使います。

        if(YES){
            NSLog(@"yes");
        }
        if(NO){
            NSLog(@"no");
        }

if( 条件式 )を書いて、条件式がYES、つまり 1 を返すのであれば続く{}の中身が実行されます。今回はYES, NOを書いたので、YESの方だけが実行されます。

また、YESでなくても0以外の値を返すのであれば実行されます。

        if(1){
            NSLog(@"1"); //実行される
        }
        if(0){
            NSLog(@"0"); //実行されない
        }
        if(-1){
            NSLog(@"-1"); //実行される
        }

ただ、普段のプログラミングでは条件式に数値をそのまま入れることはなく、こんな感じに何かを比べて条件式を書きます。

        NSInteger n = 3;

        //nが0より大きい
        if(n > 0){
            NSLog(@"n > 0"); //実行される
        }

        //nが5より大きい
        if(n > 5){
            NSLog(@"n > 5"); //実行されない
        }

nは3なので、0よりは大きいのですが、5より大きくはないので、上のNSLogのみが実行されます。

条件式で使われる不等号はこんな感じです。
数学と近い感じですね。

a > b aがbより大きい
a >= b aがb以上
a < b aがbより小さい
a <= b aがb以下
a == b aとbが等しい
a != b aがbが等しくない

また、これに「かつ」と「または」という条件を加えることが可能です。

a && b aでありかつbである
a || b aかまたはb

例)

        NSInteger n = 5;
        
        //0より大きく、かつ6未満のとき
        if(n > 0 && n < 6){
            NSLog(@"OK"); //実行される
        }
        
        //0より大きく、かつ5未満のとき
        if(n > 0 && n < 5){
            NSLog(@"OK"); //実行されない
        }
        
        //nが0未満か、または5以上のとき
        if(n < 0 || n >= 5){
            NSLog(@"OK"); //実行される
        }

if else, if elseif else

if構文、だけではなくif 〜 else構文というのもあります。
これは、if文を通らなかったときに、そちらを必ず実行します。

例)

        NSInteger n = 5;
        
        if(n < 0){
            NSLog(@"message1");
        }else{
            NSLog(@"message2"); //こちらのみ実行される
        }
        
        if(n > 3){
            NSLog(@"message3"); //こちらのみ実行される
        }else{
            NSLog(@"message4");
        }

if elseif elseという構文もあります。最初のnの値をいろいろと変更してみて、どこを通るか確かめてみるとよくわかると思います。

        NSInteger n = 5;
        
        if(n < 0){
            NSLog(@"message1_1");
        }else if(n > 2){
            NSLog(@"message1_2"); //これが実行される
        }else{
            NSLog(@"message1_3");
        }
        
        //else if は何回でもつづけて書ける
        if(n == 0){
            NSLog(@"message2_1");
        }else if(n == 3){
            NSLog(@"message2_2");
        }else if(n == 5){
            NSLog(@"message2_3"); //これが実行される
        }else if(n == 6){
            NSLog(@"message2_4");
        }else{
            NSLog(@"message2_5");
        }

いろいろと条件の書き方を書いたのですが、最初から無理して覚える必要もないと思います。何か条件を書きたいと思ったときに、どういう書き方をすればよいか調べてみて、何度か書いているうちに自然と覚えるという感じが疲れないかなと個人的に思います。

今回の課題

1) NSInteger n = 24と宣言したあと、ifの条件式をnが0以上にして、そのときに何か文字列を出力しましょう。

2) NSInteger型の変数mについて、mが0以上24以下なら「はれ」そうでないときは「あめ」と出力するプログラムをかきましょう。このとき、mが -8, 0, 18, 23, 24, 25とそれぞれ代入したときに、目的通りに動作するか確認してください。

前回の回答例

前回の課題の回答例です。

1) 5 + 3の結果を出力してください

        NSInteger n1 = 5 + 3;
        NSLog(@"%ld", n1); // 8

2) 5 – 3 x 4 の結果を出力してください

        NSInteger n2 = 5 - 3 * 4;
        NSLog(@"%ld", n2); // -7

2) (3.5 – 4.2) x (2.0 ÷ 1.2) の結果を出力してください

        CGFloat f1 = 3.5 - 4.2;
        CGFloat f2 = 2.0 / 1.2;
        NSLog(@"%f", f1 * f2); //-1.166667
        
        //一気に書いてもOK
        NSLog(@"%f", (3.5 - 4.2) * (2.0 / 1.2));

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る