アーカイブ

Archive for 2012年2月

CocoaSQLMapperでレコードの数を数える

英語圏のエンジニアからメールで、「CocoaSQLMapperを使って”select count(*) from foo”はどーするんだよ?」と質問があり、サンプルを更新した後にその三倍の時間を使って英文の返事を書きました_| ̄|○

さてSQLの集約関数ですが、下記のようなコードを書きます。

@interface Count : NSObject
@property (nonatomic) int value;
@end

NSError *error = nil;
Count *count = [database selectObjectBySQL:@"SELECT COUNT(*) AS value FROM Person" parameter:parameter resultClass:[Count class] error:&error];
if (count) {
    NSLog(@"%i", count.value);
}

ポイントはSQLの「AS句」ですが、それ以前に整数型の値を一個受け取る為に新しいクラス定義を行っているあたりが、大変残念な気持ちを誘っています。
CocoaSQLMapperは本業でも用いていて、この残念感には以前から気がついていたのですが、忙しくて放置プレイになっていました。

今の所、二つのプランがあります。

  • 整数、文字列、日付を一つ受け取る為のクラスを、予めライブラリに含める。
  • 結果セットの列が一つの場合に、resultClassにNSNumberなどの指定を許す。

どうした物でしょうね。
http://github.com/marvelph/CocoaSQLMapper

カテゴリー:開発 タグ: , ,

C言語のswitch文でcaseラベル単位にブロックを導入する時の奇麗なインデント

現代的なC言語のスタイルでは、変数のスコープは最小化するべきだと考えています。
所がこの方針でコーディングを行うと、switch文のインデントが残念な見栄えになる事が多いのではないかと思います。

長い間下記の様に書いていましたが、インデントが深過ぎると感じていました。しかも、自動インデントで奇麗に整形できないようです(少なくてもXcode4では)。

switch (i) {
    case 0:
        {
            ~
        }
        break;
    case 1:
        {
            ~
        }
        break;
}

最近、次のような書き方を思いつきました。これはインデントも浅く、自動インデントも問題ありません。

switch (i) {
    case 0: {
        ~
        break;
    }
    case 1: {
        ~
        break;
    }
}

break文をブロックの中に入れる所がポイントです。

カテゴリー:開発 タグ: