¿Por qué los ejemplos de matrices PHP dejan una coma al final?

80

He visto ejemplos como los siguientes:

$data = array(
   'username' => $user->getUsername(),
   'userpass' => $user->getPassword(),
   'email' => $user->getEmail(),
);

Sin embargo, en la práctica no siempre he dejado la coma al final. ¿Estoy haciendo algo mal o es sólo "otra" forma de hacerlo? Si estuviera usando un marco, ¿la coma final no afectaría negativamente a la generación de código? También he visto el uso de comas finales en declaraciones de matriz en otros lenguajes (Java, C ++), así que supongo que las razones para dejar las comas finales no son específicas de PHP, pero esto ha despertado mi interés.

ashurexm
fuente
1
Podría haber jurado que estaba recibiendo errores de análisis cuando dejé las comas de entrenamiento en PHP.
Lotus Notes
Supongo que es posible. En este ejemplo en particular, se analiza bien.
ashurexm
Sí @LotusNotes Estoy seguro de que también he tenido errores antes. ¡Pero claramente, ya no!
Meezaan-ud-Din

Respuestas:

109

¿Por qué los ejemplos de matrices PHP dejan una coma al final?

Porque ellos pueden. :) La entrada del manual de PHP para la matriz estados de :

Tener una coma al final de la última entrada de matriz definida, aunque es inusual, es una sintaxis válida.

En serio, esto es completamente por conveniencia, por lo que puede agregar fácilmente otro elemento a la matriz sin tener que agregar primero la coma final a la última entrada.

Hablando de otros lenguajes: ten cuidado con esto en JavaScript. Algunos navegadores más antiguos arrojarán un error, aunque los más nuevos generalmente lo permiten.

Pekka
fuente
1
Esto es lo que pensé, simplemente no estaba seguro si estaba perdiendo el bote en algo. Supongo que para las personas que dedican su tiempo a algunos idiomas que lo permiten, probablemente sea un hábito decente. Pero dado que trato con muchos lenguajes diferentes, y como dijiste que JavaScript (y quién sabe qué otros lenguajes) podría arrojar errores, podría ser más seguro para mí continuar con mi hábito de no dejar una coma al final.
ashurexm
7
Las versiones más recientes de JavaScript que el código IE6 / 7 lo permiten explícitamente, ahora.
estáticaan
9
Perl también permite la coma al final, y creo que se recomienda. En realidad, es bastante bueno tenerlo cuando se comparte código entre desarrolladores que usan el control de fuente. Si desea agregar una línea al final y necesita agregar una coma, eso significa que está tocando ambas líneas. A git blame(o equivalente en otro control de código fuente) mostrará que escribió esa línea aunque acaba de agregarle una coma. No es un gran problema de ninguna manera, pero es útil.
redbmk
2
Es útil si tiene archivos bajo control de fuente para mantener bajo el número de líneas cambiadas.
hakre
6
JSON también, JSON odia las comas finales.
Kyle Hotchkiss
27

Esta es una buena práctica al definir una matriz en varias líneas. También es alentado por los estándares de codificación de ZendFramework :

Al usar esta última declaración, recomendamos usar una coma al final del último elemento de la matriz; esto minimiza el impacto de agregar nuevos elementos en líneas sucesivas y ayuda a garantizar que no se produzcan errores de análisis debido a la falta de una coma.

Janci
fuente
23

Al trabajar con el control de versiones (git), noté que si agregamos 1 cosa a una matriz y no tenemos la coma al final, parecerá que modificamos 2 líneas porque la coma tuvo que agregarse a la línea anterior. Encuentro que esto se ve mal y puede ser engañoso al mirar los cambios del archivo, y por esta razón creo que una coma al final es algo bueno.

usuario985366
fuente
Y esa es, definitivamente, la razón por la que las comas finales son para :) Consistencia
diferencial
No sé si tiene algo que ver con por qué está ahí. Yo pensaría que no. Pero lo encuentro útil.
user985366
Pero esa es la razón por la que está aquí. Se podría decir que está aquí para evitar errores en la siguiente línea. Pero no lo es, porque ningún IDE hoy en día le permitiría agregar líneas sin comme, aparecería un aviso de error.
Ninj
@Ninj Interesante. Tomé tu primer comentario como irónico, pero no estaba seguro.
user985366
1
Lo siento, puede que haya parecido irónico. Fue muy serio. Agregamos comas en la última línea de matriz para ayudar a que las diferencias de versiones estén limpias.
Ninj
8

Porque mantiene las entradas uniformes.

Si ha tenido que cambiar el orden o agregar o eliminar entradas, sabe que es muy conveniente poder dejar una coma al final.

Si el último elemento no puede tener coma, terminará teniendo que mantener la última coma modificando las entradas. Es un ejercicio inútil y una pérdida de tiempo y movimientos de los dedos porque la intención de intercambiar o modificar entradas ya se ha logrado.

Al permitir una coma al final del último elemento, libera al programador de tener que ocuparse de este molesto e infructuoso detalle.

ahnbizcad
fuente
6

La razón es cometer cambios.

Si tiene que agregar la coma final al agregar un nuevo elemento. Estás cambiando 1 línea y agregando 1 línea. (- ++)

Al agregar un nuevo elemento cuando ya hay una coma en la línea de arriba. Solo hay 1 línea agregada y no hay cambios. (+)

Yani
fuente
5

No puedo hablar por otras personas, pero normalmente dejo una coma al final de mi código. Lo hago porque si / cuando luego agrego a la matriz, no tengo que preocuparme por perder una coma debido a que me olvido de agregar una coma a lo que anteriormente era la última línea.

Peter Horne
fuente
4

Siento que aunque está permitido, es una mala práctica, es como omitir el último punto y coma de tus funciones y bucles.

Skelly1983
fuente
3

Siempre uso una coma al final porque ayuda a evitar errores de sintaxis al agregar nuevos elementos de matriz ... es solo una buena práctica.

Kirzilla
fuente
3
Lamento revivir esto pero, ¿cómo una coma al final previene errores de sintaxis más adelante? Acabo de descubrir que PHP permite la coma al final, pero no puedo ver / encontrar el uso para ella. La adición de nuevos índices más adelante aún está completa $arr[] = ....
Daniel
@Daniel, está hablando de volver al código fuente más tarde y agregar otra línea al literal de matriz.
Sam Dufel
1

Si observa un ejemplo de configuración de archivo roundcube (config.inc.php), tiene un ejemplo con y sin coma al final.

Esta matriz define qué complementos deben habilitarse o deshabilitarse:

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve',
'password',
'archive',
'zipdownload',
);
...

Normalmente, esto sería línea por línea y si alguien quiere agregar algo en la matriz, puede hacer esto:

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve', //code by personA
'password', //code by personA
'archive', //code by personA
'zipdownload', //code by personA
'newplugin', //new code by personB
);
...

Entonces, cuando envían este código, solo ven un cambio para esa línea en particular y esto es más legible cuando se inspecciona quién está haciendo los cambios de código para esa línea en particular.

En otra línea de código, puede ver esto sin coma al final:

...
$config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'INBOX.spam', 'Trash');
...

Normalmente sería una sola línea de código donde nadie espera que este código se cambie con frecuencia.

En otras palabras:

1) Coloque una coma al final si la matriz se usa como una opción o archivo de configuración que podría necesitar cambiarse dinámicamente en el futuro. Además, si realiza cambios en esa matriz mediante programación utilizando una coma final, solo realiza cambios en el código de una línea, mientras que sin ella, tiene que lidiar con 2 líneas de códigos y esto puede causar más complejidad para analizar la matriz

2) No tiene que poner una coma al final si la matriz es una matriz constante y no espera que cambie en el futuro, pero como se menciona en la Respuesta aceptada, puede poner una coma al final, pero no tiene ningún propósito

MaXi32
fuente
0

Esto me sorprendió recientemente, pero tiene sentido. Durante mucho tiempo he intentado adherirme a una convención anterior que logra lo mismo, que es poner la coma separadora al frente de cada entrada en lugar de al final.

$data = array(
   'username' => $user->getUsername()
 , 'userpass' => $user->getPassword()
 , 'email' => $user->getEmail()
);

Las comas también se alinean de esa manera, lo que se ve bien, pero puede hacer que la sangría sea un poco incómoda. Tal vez por esa razón, no parece haberse popularizado mucho a lo largo de los años, y otros me han preguntado por qué lo hago. Supongo que la solución de PHP es un buen compromiso y, en cualquier caso, aparentemente es la solución aceptada ahora.

JohnBrooking
fuente
0

Siempre agregué comas al comienzo de la nueva entrada. Los compiladores lo ven como el símbolo de un solo carácter de anticipación que dice "hay otro en camino". No sé si los compiladores modernos usan LR (1) (recursivo a la izquierda, avance de un solo token) pero creo que ahí es donde se origina el error de sintaxis cuando una coma no tiene nada después. Es raro que alguna vez otro desarrollador esté de acuerdo conmigo, ¡pero parece que John Brooking lo hace!

Bill Hedge
fuente