今回は条件分岐でもうひとつあるswitch文です。ざっくりいうとif文の書き方を変えたものです。
if文より使用頻度は低いのですが、ifを使うよりもプログラムが読みやすくなる場合があります。
基本形
NSInteger n = 1; switch (n) { case 1: NSLog(@"n is 1"); break; //ここのbreakをはずした場合の動作 case 2: NSLog(@"n is 2"); break; default: NSLog(@"default"); break; } //上記はこれを書いた結果と同じ if(n == 1){ NSLog(@"n is 1"); }else if(n == 2){ NSLog(@"n is 2"); }else{ NSLog(@"default"); }
switch(条件式)の中の値がcaseの値と一致したところが実行されます。
上のサンプルでnを2,3と変えてみると動作がわかります。
breakをかかない場合はそのまま実行されてしまいます。
上のサンプルで//コメントで書いた部分のbreakをはずした場合の動作を確認してみるとわかります。
他言語では条件式の中に文字列を書いてcaseで一致する文字列をふりわけることが可能なものもあるのですが、Objective-Cというか、C言語ではできないです。
もし、近いことをやりたい場合は、typedef enumを使えば大丈夫です。typedefとenumについては次回に説明します。
case をつなげた場合
case 文のあとに複数のcaseを書くことが可能です。つづけるcaseの個数に特に制限はないようです。
さきほどbreak文を書き忘れた場合の動作を説明しましたが、それを意図的にやる場合ということになります。
NSInteger n = 1; switch (n) { case 1: case 2: NSLog(@"n is 1 or 2"); break; case 3: NSLog(@"n is 3"); break; default: NSLog(@"default"); break; } //上記はこれを書いた結果と同じ if(n == 1 || n == 2){ NSLog(@"n is 1 or 2"); }else if(n == 3){ NSLog(@"n is 3"); }else{ NSLog(@"default"); }
注意
caseのあとに続く文で変数を宣言するときは、{}中括弧をつける必要があります。
NSInteger n = 3; NSInteger result = 0; switch (n) { case 1:{ //ここの括弧をつけないとエラー NSInteger m = 20; result = n + m; break; }//ここの括弧 case 3:{ NSInteger l = -13; result = n - l; break; } default: NSLog(@"default"); break; } NSLog(@"result %lu", result);
前回の回答例
前回の課題の回答例です。
1) NSInteger n = 24と宣言したあと、ifの条件式をnが0以上にして、そのときに何か文字列を出力しましょう。
NSInteger n = 24; if(n >= 0){ NSLog(@"n is greater than or equal to 0"); }
2) NSInteger型の変数mについて、mが0以上24以下なら「はれ」そうでないときは「あめ」と出力するプログラムをかきましょう。このとき、mが -8, 0, 18, 23, 24, 25とそれぞれ代入したときに、目的通りに動作するか確認してください。
NSInteger m = -8; //ここの値を変える if(m >= 0 && m <= 24){ NSLog(@"はれ"); }else{ NSLog(@"あめ"); }
次回は定数関連をやってみようと思います。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ