42 votes

Qu'est-ce qui est préféré en Objective-C, la notation pointée ou la notation entre crochets?

Je lis un livre - Big Nerd Ranch iOS Programming. Il dit que la notation par point n'est pas recommandée car elle obscurcit le code. Je regarde simultanément un cours de Stanford pour la programmation iOS et il utilise beaucoup la notation par point. Que recommanderiez-vous? Personnellement, je préfère la notation entre crochets.

Pouvez-vous expliquer comment convertir ce code en notation entre crochets?

self.display.text = [self.display.text stringByAppendingString:digit];

Si je comprends bien, cela devrait être :

[[self display] setText:[[self display] text] stringByAppendingString:digit];

Est-ce correct?

67voto

Andrew Madsen Points 12967

Ceci est une question de choix personnel. Il y a ceux qui soutiennent que la notation point fait qu'il est peu clair que des messages sont envoyés (des méthodes sont appelées) car cela ressemble simplement à un accès à un élément de structure de style C. L'autre argument est que la notation point est plus facile à taper, plus facile à lire et plus concise.

En tant que quelqu'un qui écrit de l'Objective-C depuis avant l'introduction de la notation point (dans Objective-C 2.0), je comprends les arguments des deux côtés, mais je préfère utiliser la notation point moi-même. Cela dit, je pense qu'il est important pour les personnes débutant avec l'Objective-C de comprendre que la syntaxe de la notation point est convertie en appels de méthode d'accessor standard lors de la compilation. Je pense que les auteurs du livre Big Nerd Ranch ont probablement une attitude similaire, et c'est en grande partie pour cela qu'ils ont décidé d'utiliser la notation entre crochets dans le livre.

En résumé, faites ce que vous préférez. Les deux sont valides, et le choix entre les deux est essentiellement une question de style. Peu importe lequel vous choisissez, assurez-vous de comprendre que les deux styles produisent un code compilé équivalent.

MODIFICATION : J'ai oublié de répondre à la question sur la conversion de la notation point en syntaxe entre crochets. Vous êtes proche, mais ce que vous avez écrit est incorrect et ne compilera pas réellement. Cela devrait être : [[self display] setText:[[[self display] text] stringByAppendingString:digit]]. Si j'écrivais cela, je le diviserais en deux lignes (en fait, j'utiliserais la notation point) :

NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit];
[[self display] setText:stringWithDigit];

MODIFICATION 2 : Cela fait plus de 3 ans que j'ai écrit cette réponse. Je voulais juste mentionner qu'aujourd'hui, beaucoup plus de classes de framework Apple ont eu des choses qui étaient auparavant des méthodes régulières converties en @propriétés (par exemple -[NSArray count]) probablement pour une meilleure interopérabilité avec Swift. Cela m'a amené à utiliser la notation point encore plus librement qu'auparavant.

12voto

Nosrettap Points 2763

Voici mon opinion :

Vous devriez toujours utiliser la notation point lorsque vous traitez avec des propriétés. Non seulement c'est plus rapide à écrire (self.foo a moins de caractères que [short foo]) mais surtout cela rend les messages en chaîne plus faciles à comprendre. Par exemple :

self.myTextField.text.length

est plus facile à comprendre que

[[[self myTextField] text] length]

De plus, cela réduit le risque de se tromper dans la ponctuation (s'assurer d'avoir le bon nombre de crochets est bien souvent pénible).

Mais, comme d'autres l'ont déjà mentionné, c'est finalement une question d'opinion personnelle.

7voto

Daniel Galasko Points 485

Je sais que c'est un vieux post mais j'aimerais ajouter une réponse plus moderne.

Avec la sortie de swift et la disparition imminente de notre langage préféré, la préférence devrait pencher vers la notation pointée. Tous les frameworks iOS ont mis à jour leur API pour favoriser la notation pointée (préférant les propriétés en lecture seule dans un en-tête aux getters). Cela rend la transition vers swift plus fluide.

Pour être clair, préférez les propriétés pour les cas où vous exposez des getters et/ou des setters. Heureusement, l'outil de migration objective-c moderne de Xcode le fera pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X