2009年5月4日月曜日

Objective-CではJavaのようにNullPointerExceptionが発生したりしない

そう、Objective-CにはNilPointerExceptionのようなものがないんです。
Javaでは
int main(String[] args) {
  String str = null;
  int length = str.length(); //NullPointerException

  // bar()がnullだとNullPointerException
  Object result = Foo.bar().baz().abesi().hidebu();
}
Objective-Cでは
int main(int argc, char** argv){
  NSString *str = nil;
  int length = [str length]; //何も起こらない。lengthにはデフォルト値0が入る

  // barがnilを返したら、後続のbaz, abesi, hidebuもnilを返す。
  id result = [[[[Foo bar] baz] abesi] hidebu];
}

同僚の方(http://twitter.com/ksk_matsuo/status/1682599075)よりこっそり教えていただきました。ありがとうございます!

なんと言ってもJava人にとっていちばん恐ろしいのがこのNullPointerExceptionなのですよ。だからオブジェクトのメソッドを呼び出すときはいつでもオブジェクトがnullだったらどうしようガクブルと思いながらプログラム書いてるわけです。それがいきなり「Objective-Cになったらぬるぽなんてありません安心です^^」なんて言われても安心できないなぁ><