Permettez-moi de commencer par dire que j'ai commencé la programmation en Visual/Réel de Base, pour ensuite s'en Java, donc je suis assez utilisé pour la syntaxe à point. Cependant, lorsque je suis enfin passé à l'Objective-C et entre parenthèses, puis a vu l'introduction d'Objective-C 2.0 et sa syntaxe à point, j'ai réalisé que je n'aime vraiment pas ça. (pour les autres langues, c'est bien, parce que c'est comment ils roulent).
J'ai trois principales renforce avec la syntaxe à point en Objective-C:
Boeuf #1: Il rend difficile de comprendre pourquoi vous avez peut-être des erreurs. Par exemple, si j'ai la ligne:
something.frame.origin.x = 42;
Alors, je vais obtenir une erreur de compilation, car something
est un objet, et vous ne pouvez pas utiliser les structures d'un objet comme la lvalue d'une expression. Cependant, si j'ai:
something.frame.origin.x = 42;
Alors cette compile très bien, car something
est une structure qui a une NSRect membre, et je peux l'utiliser comme une lvalue.
Si j'étais l'adoption de ce code, j'aurais besoin de passer un peu de temps à essayer de comprendre ce qu' something
. Est-ce une struct? Est-il un objet? Cependant, lorsque nous utilisons le support de la syntaxe, c'est beaucoup plus clair:
[something setFrame:newFrame];
Dans ce cas, il n'y a absolument aucune ambiguïté si something
est un objet ou non. L'introduction de l'ambiguïté est mon boeuf #1.
Boeuf #2: En C, la syntaxe à point est utilisé pour accéder aux membres de leurs structures, de ne pas appeler les méthodes. Les programmeurs peuvent remplacer l' setFoo:
et foo
méthodes d'un objet, mais encore y accéder via something.foo
. Dans mon esprit, quand je vois des expressions à l'aide de la syntaxe à point, je m'attends à être une simple assignation dans un ivar. Ce n'est pas toujours le cas. Considérons un objet contrôleur qui intervient dans un tableau et une tableview. Si je l'appelle, myController.contentArray = newArray;
, je m'attends à ce qu'il soit en remplacement de l'ancien tableau avec le nouveau tableau. Toutefois, l'original, le programmeur peut avoir remplacé setContentArray:
non seulement de définir la matrice, mais également recharger la tableview. À partir de la ligne, il n'y a aucune indication de ce comportement. Si je devais le voir [myController setContentArray:newArray];
, puis je pense que "Aha, une méthode. J'ai besoin d'aller voir la définition de cette méthode juste pour faire sûr que je sais ce qu'il fait."
Je pense donc que mon résumé de Boeuf #2, c'est que vous pouvez remplacer le sens de la syntaxe à point avec un code personnalisé.
Boeuf #3: je pense qu'il est de mauvaise qualité. Objectif-programmeur en C, je suis totalement utilisé pour le support de la syntaxe, à la lecture de long et de voir des lignes et des lignes de belles parenthèses et puis pour être tout à coup brisé foo.name = newName; foo.size = newSize;
etc est un peu gênant pour moi. Je me rends compte que certaines choses nécessitent la syntaxe à point (C struct), mais c'est la seule fois que je l'utilise.
Bien sûr, si vous écrivez du code pour vous-même, puis utilisez ce que vous sentez à l'aise avec. Mais si vous écrivez du code que vous avez l'intention de l'open source, ou vous écrivez quelque chose que vous ne vous attendez pas à maintenir pour toujours, alors je voudrais forte encourager l'utilisation du support de la syntaxe. C'est, bien sûr, juste mon avis.
Blog contre la syntaxe à point: http://weblog.bignerdranch.com/?p=83
Réfutation de post ci-dessus: http://eschatologist.net/blog/?p=226 (avec l'original de l'article en faveur de la syntaxe à point: http://eschatologist.net/blog/?p=160)