Question

Quelle syntaxe pensez-vous être mieux / plus lisible?

if(!myViewController.view.superview)

ou:

if(myViewController.view.superview == nil)

Merci !!

Était-ce utile?

La solution

Les deux sont très proches, cela dépend des goûts personnels ou des standards du projet en question.

Dire! myViewController.view.superview qui signifie "pas de superview" est très clair.

Dire myViewController.view.superview == nil signifie que superview est nil est également très clair.

Je préférerais probablement l'ancien car si j'écrivais en anglais, je dirais:

  

s'il n'y a pas de superview alors

Je ne dirais pas

  

si le superview n’est rien alors

Mais ils sont si proches, et tout à fait équivalents, qu’il ne vaut même pas la peine d’être compatibles. Ne vous méprenez pas, je suis tout pour la cohérence en général, c'est qu'il n'y a vraiment aucune différence de lisibilité entre les deux.

Autres conseils

J'utilise le deuxième formulaire parce que l'intention est plus claire de cette façon.

Voici un lien vers les normes de codage Objective C de Google: http://google-styleguide.googlecode.com/svn/trunk/objcguide. xml

Ils ne disent pas explicitement quelle voie ils préfèrent, mais ils n'utilisent que nil pour les contrôles de logique, ce que votre exemple ci-dessus qualifierait.

Personnellement, j'ai longtemps utilisé cette dernière expression, mais inversée. Utilisation de " foo == nil " (ou nil == foo, pour éviter les bugs causés par l'oubli d'un '=') est plus pédant. Vous finirez par en avoir assez de le taper, et la première version est également immunisée contre le bogue d'assignation accidentel nil.

Il est bon que les nouveaux codeurs fassent des commentaires verbaux, car cela les oblige à réfléchir à ce qui se passe réellement, mais plus tard, passez à une version plus rapide si elle est équivalente.

Si pour une raison insensée, les pointeurs nuls n'étaient plus 0, mais une autre valeur non valide (il existe des régions de mémoire gigantesques entières qui ne sont pas des pointeurs), alors utilisez '!' ne fonctionnerait plus, mais cela n'arriverait jamais (ou si cela se produisait, ils ajouteraient un support au compilateur pour surcharger "!" de sorte que cela signifiait "non invalide" lorsqu'il était utilisé avec un pointeur d'objet et ferait le droit de toute façon, sinon les développeurs du monde Objective-C deviendraient fous).

Le seul problème avec cela est qu'il peut commencer à vous entraîner à confondre la valeur des expressions booléennes de C avec les valeurs d'autres types, qui ne sont pas la même chose. Donc, si vous commencez à penser qu'une expression booléenne est juste un BOOL, supposons que l'affectation d'une valeur non nulle à une variable BOOL fasse ce que vous voulez, mais ce ne sera pas le cas. Puisqu’un BOOL n’est qu’un caractère (actuellement), si vous faites quelque chose comme:

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

où la conversion implicite de 256 ou plus en BOOL vous donne zéro (NON) par troncature, et non par OUI, comme vous le souhaitez, par opposition à

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

ou

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

Tout ce que je dis, c'est: assurez-vous de bien comprendre le fond et les subtilités.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top