Permítanme comenzar diciendo que comencé a programar en Visual / Real Basic, luego pasé a Java, así que estoy bastante acostumbrado a la sintaxis de puntos. Sin embargo, cuando finalmente me mudé a Objective-C y me acostumbré a los corchetes, luego vi la introducción de Objective-C 2.0 y su sintaxis de puntos, me di cuenta de que realmente no me gusta. (para otros idiomas está bien, porque así es como funcionan).
Tengo tres beefs principales con sintaxis de puntos en Objective-C:
Carne de res n. ° 1: No queda claro por qué podría estar recibiendo errores. Por ejemplo, si tengo la línea:
something.frame.origin.x = 42;
Entonces obtendré un error del compilador, porque something
es un objeto, y no puede usar estructuras de un objeto como el lvalue de una expresión. Sin embargo, si tengo:
something.frame.origin.x = 42;
Entonces esto se compila bien, porque something
es una estructura en sí misma que tiene un miembro NSRect, y puedo usarlo como un lvalue.
Si estuviera adoptando este código, necesitaría dedicar un tiempo a tratar de averiguar qué something
es. ¿Es una estructura? ¿Es un objeto? Sin embargo, cuando usamos la sintaxis de corchetes, es mucho más claro:
[something setFrame:newFrame];
En este caso, no hay absolutamente ninguna ambigüedad si something
es un objeto o no. La introducción de la ambigüedad es mi problema número uno.
Beef # 2: En C, la sintaxis de puntos se usa para acceder a miembros de estructuras, no a métodos de llamada. Los programadores pueden anular los métodos setFoo:
y foo
de un objeto, pero aún así acceder a ellos a través de something.foo
. En mi mente, cuando veo expresiones que usan la sintaxis de puntos, espero que sean una simple asignación en un ivar. Este no es siempre el caso. Considere un objeto controlador que media una matriz y una vista de tabla. Si llamo myController.contentArray = newArray;
, esperaría que reemplazara la matriz anterior con la nueva matriz. Sin embargo, es posible que el programador original se haya anulado setContentArray:
no solo para configurar la matriz, sino también para volver a cargar la vista de tabla. Desde la línea, no hay indicios de ese comportamiento. Si tuviera que ver[myController setContentArray:newArray];
, entonces pensaba "Ajá, un método. Necesito ir a ver la definición de este método sólo para asegurarme de saber lo que está haciendo".
Así que creo que mi resumen de Beef # 2 es que puede anular el significado de la sintaxis de puntos con código personalizado.
Ternera # 3: Creo que se ve mal. Como programador de Objective-C, estoy totalmente acostumbrado a la sintaxis entre corchetes, por lo que leer y ver líneas y líneas de hermosos corchetes y luego romper repentinamente con, foo.name = newName; foo.size = newSize;
etc., me distrae un poco. Me doy cuenta de que algunas cosas requieren sintaxis de puntos (estructuras C), pero esa es la única vez que las uso.
Por supuesto, si está escribiendo código para usted mismo, use lo que le resulte cómodo. Pero si está escribiendo un código que está planeando en código abierto, o está escribiendo algo que no espera mantener para siempre, le recomiendo encarecidamente que use la sintaxis de corchetes. Esta es, por supuesto, solo mi opinión.
Publicación de blog reciente contra la sintaxis de puntos: http://weblog.bignerdranch.com/?p=83
Refutación a la publicación anterior: http://eschatologist.net/blog/?p=226 (con artículo original a favor de la sintaxis de puntos: http://eschatologist.net/blog/?p=160 )