コース: Objective-C 基本講座

enumとswitchを使う

このレッスンでは整数値にキーワードを 割り当てられるenum と整数値による 分岐を記述するスイッチ文を学習します ジュースを買ったり 本を買ったりといった 日常起こる出来事の種類を引数で受け取り動作 をシュミレートする関数を考えてみましょう oneDaySimulator とします こういった場合oneDaySimulator 外の 処理ではif 文で出来事に合わせた 対応を書いていくことになります そして出来事が追加されるたびに if 文が増えていきます 例えばここに4 番目の出来事として 新刊を買うを加えてみましょう しかしこうやって番号が増えていき20 とか 30 とかになると何番がどんな出来事だか わからなくなってきます コメントをつければいいことなのですが できれば番号より出来事に見合った 単語を並べたいところです こういった意見に答えるために 用意されたものがenum です enum キーワードを使いブレースピア の中にカンマで区切って文字列を並べることで これらの文字列を プログラム中で使えるようになります 並べられる文字列には int やstrupt 、if と言った 既存のキーワード以外のものが使えます enum として列挙された文字列は 整数値として扱われ特に断らなければ ゼロから順に割り付けられます 必要なら文字列に整数値を代入することで 後に続く文字列に割当てられる 数値も変更できます 割り付ける数値がかぶっても構いません またenum に続けて任意の名前を付けると 型としても利用できます oneDaySimulator の引数に 使うとタイプという 仮引数の目的がより明確になります また望むなら名前の後ろにセミコロンと型を 続けることで割当てる記憶区画の大きさを厳密 に指定することもできますが通常は何も書かず にコンパイラに任せておけばいいでしょう enum を使うことで if 文も読みやすくなります このoneDaySimulator 関数内 の処理に関してですがたくさんの分割には if 文の代わりに スイッチ文を使うことも可能です スイッチ文は整数型変数との比較に限定した 分岐分でスイッチキーワードに続くカッコ内に 変数名を記述しその後に続くブレース内に 変数の値別に分岐を用意します 一つの分岐はケースキーワードに続けて 分岐対象となる値を書き 最後にセミコロンをつければ用意されます 直接数字リテラルを書くこともできます 分岐ごとの処理はセミコロンの後に複数記述 できますが最後にブレーク命令を実行させて スイッチ文から抜けないとそのまま 下の行の処理を続ける仕組みになっています わざとブレーク命令をつけずに 特殊な分岐処理を行ったり 分岐だけ羅列して処理をまとめたりもできます またデフォルトキーワードを使って列挙した 分岐以外のすべてに適用する処理を 記述することもできます それではenum とスイッチ文を使った 実際のプログラムをお見せします Xcode の画面に切り替えます ark4randam_uniform 関数 は0 から引数に渡した値未満の 乱数を戻します 乱数とは不規則ででたらめな値です 使うにはスタンダードライブラリー stdlib.h を インクルードする必要があります 今回はenum の最後の列挙である book にプラス1した値を渡しているので borrow< /iから でたらめに返されてきます その値を使って oneDaySimulator を 呼び出してみます 乱数を使っているのでランするたびに 結果が変わります スイッチ文よりif 文の方が すっきりする場合もあるので状況に応じて 使い分けるといいでしょう このレッスンでは整数値にキーワードを 割り当てられるenum と整数値による 分岐を記述すスイッチ文を学習しました

目次