スマホ開発で旬な三大言語のヌルチェックについてメモ
初心者レベルの話になるので当たり前体操なコンテンツですみません。。。
Android, iOS開発で使われるJava, C++, Objective-Cはどれもオブジェクト指向型言語。
そのヌルチェックについての違いをまとめてみた。
ここで各言語においてobjというインスタンスがあるとする。
それがisTrueという関数を持つとき、その関数は各言語で定められた真偽値を返すとする。
そこでisTrueが真に当たるほうの値を返すかどうかのif文を考える。
ちなみにobjはヌルかもしれないしヌルでないかも知れない。
Javaでは
if(obj != null && obj.isTrue()) {
// 処理
}
&&を使って判定するときJavaではifの括弧内を手前から順番に実行する。falseを返した時点で括弧内の実行を抜けるためobjがヌルならばisTrue()を行なわないからヌルポにならなくてすむ。
ちなみに||の場合trueが確定しても最後まで実行されるので
if(obj == null || !obj.isTrue()) {
} else {
// 処理
}
は安全ではない。
話を戻して、C++で安全に行なうには
if(obj != NULL) if(obj.isTrue()) {
// 処理
}
としなければならない。
Javaと違い、&&でfalse確定でも最後までやりきってしまうからだ。
Javaのほうがここの記述がスマートにできていいなーと思っていたら
Objective-Cのほうがクールだった。
if([obj isTrue]) {
// 処理
}
万が一nil(Objective-Cのヌル)にメッセージを送っても問題ないらしい。
nilにメッセージを送るとnilか0を返すらしいから
多分この場合はNOになるのかな・・・(素人のため自信無し)
おかしなところがあったら修正してくださいな。。。