目的C-どの構文ですか?
-
22-07-2019 - |
質問
どの構文がより良い/読みやすいと思いますか
if(!myViewController.view.superview)
または:
if(myViewController.view.superview == nil)
ありがとう!!
解決
この2つは非常に近いものであり、個人的な趣味または問題のプロジェクトのコーディング基準に帰着します。
「スーパービューなし」を意味する!myViewController.view.superviewと言う非常に明確です。
myViewController.view.superview == nilと言うことは、スーパービューがnilであることを意味します。
もし私が英語で書いているなら、私は言うだろうので、おそらく前者を好むだろう:
スーパービューがない場合
言わないよ
スーパービューが何もない場合
しかし、それらは非常に近く、完全に同等であるため、整合性をとる価値さえありません。誤解しないでください、私は一般的に一貫性のためです、それは2つの間に読みやすさの違いが本当にないだけです。
他のヒント
2番目の形式を使用するのは、その方法の意図がより明確だからです。
GoogleのObjective Cコーディング標準へのリンクは次のとおりです。 http://google-styleguide.googlecode.com/svn/trunk/objcguide。 xml
彼らはどちらを好むかを明示的には言いませんが、論理チェックにnilのみを使用するように言っています。
個人的に長い間、後者の表現を使用しましたが、逆になりました。 " foo == nil"の使用(またはnil == foo、1つの '='を忘れることによって引き起こされるバグを回避する)は、より教訓的です。最終的には入力にうんざりし、最初のバージョンは偶発的なnil割り当てバグの影響も受けません。
新しいコーダーがコーディングしていることを冗長にするのは良いことです。実際に何が起こっているのかを考えさせる練習になるので、もちろん、後で同等の場合はより高速なバージョンに切り替えます。
何らかの異常な理由で、nilポインターが0ではなく、その他の無効な値(ポインターとして無効なメモリの巨大な領域全体が存在する)である場合、「!」もう動作しませんが、それは起こりません(または、動作した場合、コンパイラにサポートを追加して '!'をオーバーロードするため、オブジェクトポインターで使用したときに「無効ではない」ことを意味し、正しく動作しますとにかく、そうでなければ世界のObjective-C開発者は夢中になるでしょう。
これに関する唯一の微妙な問題は、Cのブール式の値を他の型の値と混同するよう訓練することができるということです。これらは同じではありません。したがって、ブール式が単なるBOOLであると考えるようになった場合、ゼロ以外の値をBOOL変数に割り当てると、必要な処理が行われるものの、そうではないと考えるかもしれません。 BOOLは単なる文字であるため(現在)、次のような場合:
- (BOOL)checkFoo {
BOOL foo = [bar count]; // imagine count is > 255
if(foo)
[self doSomething];
return foo;
}
256以上を暗黙的にBOOLにキャストすると、YESではなく切り捨てによってゼロ(NO)になります。
- (BOOL)checkFoo {
BOOL foo = ([bar count] > 0);
if(foo)
[self doSomething];
return foo;
}
または
- (BOOL)checkFoo {
if([bar count]) {
[self doSomething];
return YES;
}
return NO;
}
私が言っているのは、背景と微妙な点を理解してください。