Domanda

Quale sintassi pensi sia migliore / più leggibile?

if(!myViewController.view.superview)

o

if(myViewController.view.superview == nil)

Grazie !!

È stato utile?

Soluzione

I due sono molto vicini, dipende dal gusto personale o dagli standard conduttivi del progetto in questione.

Dire! myViewController.view.superview che significa " no superview " è molto chiaro.

Dire anche myViewController.view.superview == zero significa che superview è zero è anche molto chiaro.

Probabilmente preferirei la prima poiché, se scrivessi in inglese, direi:

  

se non c'è superview allora

Non direi

  

se la superview non è nulla

Ma sono così vicini, e del tutto equivalenti, che non vale nemmeno la pena essere coerenti. Non fraintendetemi, sono tutti per coerenza in generale, è solo che non c'è davvero alcuna differenza nella leggibilità tra i due.

Altri suggerimenti

Uso il secondo modulo perché l'intenzione è più chiara in questo modo.

Ecco un link agli standard di codifica Obiettivo C di Google: http://google-styleguide.googlecode.com/svn/trunk/objcguide. xml

Non dicono esplicitamente in che modo preferiscono, ma dicono di usare solo zero per i controlli logici, di cui il tuo esempio sopra si qualificherebbe.

Personalmente per molto tempo ho usato quest'ultima espressione, ma al contrario. Utilizzando " foo == nil " (o zero == pippo, per evitare bug causati dalla dimenticanza di uno "=") è più pedante. Alla fine ti stancherai di digitarlo e anche la prima versione è immune al bug accidentale di assegnazione zero.

È utile che i nuovi programmatori siano prolissi in ciò che stanno codificando, in quanto fornisce la pratica per costringerli a pensare a ciò che sta realmente accadendo, ma in seguito, ovviamente, passa a una versione più veloce se equivalente.

Se per qualche motivo insano, i puntatori zero non erano più 0, ma qualche altro valore non valido (ci sono intere regioni gigantesche di memoria che non sono valide come puntatori), quindi usando '!' non funzionerebbe più, ma ciò non accadrà mai (o se lo facesse, aggiungerebbero il supporto al compilatore per sovraccaricare "!" in modo che significasse "non valido" quando usato con un puntatore ad oggetto e farebbe il giusto comunque, altrimenti gli sviluppatori di Objective-C del mondo impazzirebbero.)

L'unico problema sottile è che può iniziare ad addestrarti a confondere il valore delle espressioni booleane di C con i valori di altri tipi, che non sono la stessa cosa. Quindi, se inizi a pensare che un'espressione booleana sia solo una BOOL, ad esempio, potresti supporre che l'assegnazione di qualsiasi valore diverso da zero a una variabile BOOL farà ciò che desideri, ma non lo farà. Poiché un BOOL è solo un carattere (attualmente), se fai qualcosa del tipo:

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

dove il cast implicito 256 o superiore su BOOL ti porta a zero (NO) per troncamento, non SÌ, che è quello che vuoi, contro

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

o

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

Tutto quello che sto dicendo è, assicurati di capire lo sfondo e le sottigliezze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top