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になんないの?って勘違い起きそうじゃない?って議論があるようで。
個人的には最後に挙げたコードで十分だし、読めると判断したのでこの方法を使おう。