2009-08-04 9 views
3

Welche Syntax ist Ihrer Meinung nach besser/besser lesbar?Ziel C - Welche Syntax?

if(!myViewController.view.superview) 

oder:

if(myViewController.view.superview == nil) 

Dank !!

Antwort

8

Die beiden sind sehr nah dran, es kommt auf den persönlichen Geschmack oder die entsprechenden Standards des jeweiligen Projekts an.

Sagen! MyViewController.view.superview Bedeutung "keine Superview" ist sehr klar.

Sagen myViewController.view.superview == nil Bedeutung Superview ist Null ist auch sehr klar.

Ich würde wahrscheinlich das ehemalige bevorzugen, da, wenn ich auf Englisch schreibe, würde ich sagen:

, wenn es keine Super dann

ist

ich nicht sagen würde

, wenn die Superview ist nichts dann

Aber sie sind so nah und völlig äquivalent, dass es kaum wert ist, mit ihnen übereinzustimmen. Versteh mich nicht falsch, ich bin ganz auf Konsistenz im Allgemeinen, es gibt nur keinen Unterschied in der Lesbarkeit zwischen den beiden.

8

Ich benutze die zweite Form, weil die Absicht so klar ist. Hier

0

Persönlich für eine lange Zeit habe ich den letzteren Ausdruck verwendet, aber umgekehrt. Die Verwendung von "foo == nil" (oder nil == foo, um Fehler zu vermeiden, die durch das Vergessen eines "=" verursacht werden) ist pedantischer. Irgendwann wirst du es leid sein, es zu tippen, und die erste Version ist auch immun gegen den zufälligen Null-Zuweisung-Bug.

Es ist gut für neue Programmierer, in dem, was sie codieren, ausführlich zu sein, da es Übung zwingt, darüber nachzudenken, was wirklich vor sich geht, aber später natürlich zu einer Version wechseln, die schneller ist, wenn es äquivalent ist .

Wenn aus irgendeinem Grund Nullzeiger nicht mehr 0 waren, sondern ein anderer ungültiger Wert (es gibt ganze riesige Speicherbereiche, die als Zeiger ungültig sind), dann benutze '!' würde nicht mehr funktionieren, aber das wird nie passieren (oder wenn dies der Fall wäre, würden sie dem Compiler Unterstützung hinzufügen, um '!' zu überladen, so dass es bei Verwendung mit einem Objektzeiger "nicht ungültig" bedeutet und das Richtige tun würde sowieso, sonst würden die Objective-C-Entwickler der Welt verrückt werden.

Das einzige subtile Problem mit diesem ist, dass es beginnen kann, Sie zu trainieren, den Wert der Booleschen Ausdrücke von C mit den Werten von anderen Typen zu verwechseln, die sie nicht dasselbe sind. Wenn Sie also glauben, dass ein boolescher Ausdruck nur ein BOOL ist, könnten Sie beispielsweise davon ausgehen, dass die Zuweisung eines beliebigen Werts ungleich Null für eine BOOL-Variable zu dem passt, was Sie wollen, aber nicht.Da ein BOOL nur ein char (zur Zeit) ist, wenn Sie so etwas tun:

- (BOOL)checkFoo { 
    BOOL foo = [bar count]; // imagine count is > 255 
    if(foo) 
     [self doSomething]; 
    return foo; 
} 

wo implizit Gießen 256 oder höher BOOL Sie (NO) durch Abschneiden wird Null, nicht JA, das ist, was Sie wollen, gegen

- (BOOL)checkFoo { 
    BOOL foo = ([bar count] > 0); 
    if(foo) 
     [self doSomething]; 
    return foo; 
} 

oder

- (BOOL)checkFoo { 
    if([bar count]) { 
     [self doSomething]; 
     return YES; 
    } 
    return NO; 
} 

alles, was ich sagen werde, stellen Sie sicher, dass Sie den Hintergrund und die Feinheiten zu verstehen.