30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Objective-Cで空文字列のチェック

Posted at

私はJava→Objective-Cの順で学んだプログラマなのだが、
Objective-Cにおいて、以下のように空文字列チェックをしていた。

#define IS_EMPTY(s) ((s == nil) || ([s length] == 0))

NSString *emptyString = @"";
NSString *nilString   = nil;
NSString *someString  = @"foo";

// nilまたは空文字列でないかチェックする
NSLog(@"%@", !IS_EMPTY(emptyString) ? @"YES" : @"NO");
NSLog(@"%@", !IS_EMPTY(nilString)   ? @"YES" : @"NO");
NSLog(@"%@", !IS_EMPTY(someString)  ? @"YES" : @"NO");

しかし

  • C言語およびObjective-Cにおいて、0が「偽」で、0以外が「真」である
  • nilに対するメッセージ送信結果はnil(数値を返す場合には0)が返却される

ことを考慮すると、どうやら以下がスマートな書き方らしい。

// nilまたは空文字列でないかチェックする
NSLog(@"%@", [emptyString length] ? @"YES" : @"NO");
NSLog(@"%@", [nilString length]   ? @"YES" : @"NO");
NSLog(@"%@", [someString length]  ? @"YES" : @"NO");

これは慣れるまでは読みづらい気がするが、
少なくともnilチェックと混在したコードよりはスッキリしているように思える。

// 明示的なnilおよび長さチェック
if (someString != nil && [someString length] > 0) 

// 言語仕様を活かしたチェック
if ([someString length])

どちらが良いかは議論が分かれる部分はあると思う。
しかし、(チームで開発するのであれば)どちらに統一するかコーディング規約があるほうが良い気がする。

30
29
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?