vectores una resueltos que programacion matriz matrices matematicas ejemplos declarar como bidimensionales arreglos java arrays static-analysis

una - vectores en java netbeans



Las matrices no deben inicializarse estáticamente mediante un inicializador de matriz. ¿Por qué? (2)

Esta es una de las reglas del analizador estático Googles CodePro AnalytiX:

Resumen

Las matrices no deben inicializarse estáticamente mediante un inicializador de matriz.

Descripción

Esta regla de auditoría comprueba las variables de matriz que se inicializan (en el inicializador o en una declaración de asignación) utilizando un inicializador de matriz.

Ejemplo

La siguiente declaración de matriz se marcará debido al uso de un inicializador de matriz:

int[] values = {0, 1, 2};

Ahora, puedo desactivarlo si no me gusta, eso no es un problema. Pero me pregunto por qué sería esto un problema, y ​​¿cuál sería la solución para evitar que el código sea marcado por la regla de auditoría?


Creo que es porque es una sintaxis especial que solo funciona al inicializar values .

int[] values = {1,2,3} //legal int[] values2; values2 = {1,2,3} //not legal int [] values3; values3 = new int[]{1,2,3} //legal

La última forma de values3 es legal, ya sea al crear la matriz o más adelante. Entonces, en lugar de mezclar formas de inicialización de matrices, sería mejor usar siempre la misma forma. En mi humilde opinión que hace un código más claro, siguiendo el principio de menor sorpresa.

Aunque parezca extraño, el https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.3.1-array-initializers no prohíbe esta forma de inicialización, que es muy clara en este example .


Es una pregunta interesante, y esta decisión es infundada en mi humilde opinión. (Espero que alguien más responda este hilo si hay una razón legítima detrás de esta decisión de diseño).

Además, Google muestra cómo formatear esos inicializadores estáticos en su guía de formato de buenas prácticas https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.8.3.1-array-initializers sin decir nada sobre cómo malo es usar esos constructos ...

Supongo que la persona detrás de esa regla simplemente tiene un diente en contra de ese estilo de programación :)