NSStringのnull or emptyチェック

一人でコーディングしてると、自分が書いたコードがベストなのかどうかわかんなくて不安になったので調べた。

最初はシンプルに

NSString *text;
if (text == nil && [text isEqualToString:@""]) {
    // nilのとき
}

って書いてたんだけど、JavaでいうApache StringUtilsのisBlank()的なメソッドはないもんかと探してみたら、意外な方法があるとな。

http://stackoverflow.com/questions/6177719/testing-for-nil-in-objective-c-ifx-nil-vs-ifx

Q&Aの趣旨とはちがうけど、Objective-Cのif文の条件式に、nullチェックかけたいオブジェクトを入れると、nullのときfalseを返してくれる言語仕様がある。なのでこんな書き方もできる。

if (text) {
    // nilのとき
}

(元記事は大まかに言うと

Q:この書き方と、text == nilどっちがいいの?

A:この書き方だと人によっては条件文がナニコレってなるから、text == nilのほうがいいときもあるかもね。状況によりけりかな。って感じ。)


さらにこれを発展させると、
http://stackoverflow.com/questions/899209/how-do-i-test-if-a-string-is-empty-in-objective-c

if([text length]==0){
    // nilのとき
}

こうすると、textがnullだった時点で条件文がfalseになるし、空文字のときのチェックもできて短くてハッピーだね。って方法があった。

ただし、ちょっとした見た目の動作と実際の動作に飛躍があって、nullのときのlengthは0だから0==0でtrueになんないの?って勘違い起きそうじゃない?って議論があるようで。

個人的には最後に挙げたコードで十分だし、読めると判断したのでこの方法を使おう。