頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


列挙型でコードがすっきり

列挙型というのを使うと理解しやすいコードを書けるよねってお話だよ。

あるクラスのメソッドでなにか計算させてその結果を得る、なんてよくある状況を考えてみてよ。
CGRect frame = [Hoge getFrameForArray:array];
↑これは配列をあげるからCGRect型の計算結果をちょうだいってメソッドなんだけど、当然処理の内容にもよるけど具合が悪いというか足りない場合があるんだ。
例えば計算途中にエラーが起きることだってあるかもしれない。今は具合悪いから後でやり直ししてなんてこともあるかもしれないよね。
そういう情報を返そうと思うとCGRect型だけを返すのじゃ足りないことになる。そんな時俺は構造体を使うことにしてるんだ。
こんな感じで。
typedef struct {
    CGRect frame;
    int status;
} FrameInfo;
計算して問題なければ0とかリトライなら1とかエラーなら2とか決めておけばいいんだけど、このクラスのメソッドを呼び出した側ではこんなことが起きるんだ。
FrameInfo frameInfo = [Hoge getFrameForArray:array];
if (frameInfo.status == 0) {
    //何かの処理
} else if (frameInfo.status == 1) {
    //何かの処理
}
どう?わかりにくくない?ゼロって何を意味してるんだよ?とかなるでしょ。ならない?なれよっ!不便だと思えよっ!
こういう時に文字をごにょごにょって書いてるサンプルコードを見たことない?あれを使うとコードが読みやすくなるんだよ。
列挙型というんだけど、こんな風に定義できるんだ。
enum GetFrameStatus {
    SUCCESS,
    RETRY,
    ERROR
};
これならさっきのコードが下のようになるから理解しやすくなるでしょ。
FrameInfo frameInfo = [Hoge getFrameForArray:array];
if (frameInfo.status == SUCCESS) {
    //何かの処理
} else if (frameInfo.status == RETRY) {
    //何かの処理
}
この列挙型というのは実際には整数を順に割り当てているだけだから、入れ物の型は整数でもいいんだけど下のように書き換えることもできるよ。
typedef struct {
    CGRect frame;
    enum GetFrameStatus status;
} FrameInfo;
こうしておけばstatusってのはGetFrameStatus型のどれかなんだなってのがわかるわけだ。覚えておけよ!

なんてえらそうに言ってるけど、今日気付いたとこなんだ。へへっ!

参考 : typedef enumの使い方を教えてください - C・C++ - 教えて!goo

<< ブレスサーモはニセ科学なの?   TopPage  Wireless KeyboardをiPadに接続 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/696-a88b290d




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad