Como otros dijeron, depende del idioma. Pero demostraré mis ideas de Java (y Java efectivo) sobre la inicialización de variables. Estos deberían ser utilizables para muchos otros idiomas de nivel superior.
Constantes y variables de clase
Las variables de clase, marcadas con static
en Java, son como constantes. Estas variables normalmente deberían ser finales e inicializadas directamente después de la definición usando =
o desde un bloque de inicializador de clase static { // initialize here }
.
Campos
Como en muchos idiomas de nivel superior y scripting, los campos se asignarán automáticamente a un valor predeterminado. Para números y char
este será el valor cero. Para cadenas y otros objetos será null
. Ahoranull
es peligroso y debe usarse con moderación. Por lo tanto, estos campos deben establecerse en un valor válido lo antes posible. El constructor es normalmente un lugar perfecto para esto. Para asegurarse de que las variables se establecen durante el constructor y no se cambian después, puede marcarlas con la final
palabra clave.
Intenta resistir el impulso de usar null
como algún tipo de bandera o valor especial. Es mejor, por ejemplo, incluir un campo específico para mantener el estado. Un campo con el nombre state
que usa los valores de unState
enumeración sería una buena opción.
Parámetros del método
Como la persona que llama no verá los cambios en los valores de los parámetros (ya sea referencias a objetos o tipos básicos como enteros, etc.), los parámetros deben marcarse como final
. Esto significa que los valores de la variable en sí no se pueden cambiar. Tenga en cuenta que el valor de las instancias de objeto mutable se puede cambiar, la referencia no se puede cambiar para apuntar a un objeto diferente onull
aunque.
Variables locales
Las variables locales no se inicializan automáticamente; deben inicializarse antes de poder usar su valor. Un método para asegurarse de que su variable se inicialice es inicializarla directamente a algún tipo de valor predeterminado. Sin embargo, esto es algo que no deberías hacer. La mayoría de las veces el valor predeterminado no es un valor que esperaría.
Es mucho mejor definir solo la variable precisamente donde la necesita. Si la variable solo toma un valor único (lo cual es cierto para la mayoría de las variables en buen código), entonces puede marcar la variable final
. Esto asegura que la variable local se asigne exactamente una vez, no cero veces o dos veces. Un ejemplo:
public static doMethod(final int x) {
final int y; // no assignment yet, it's final so it *must* be assigned
if (x < 0) {
y = 0;
} else if (x > 0) {
y = x;
} else {
// do nothing <- error, y not assigned if x = 0
// throwing an exception here is acceptable though
}
}
Tenga en cuenta que muchos idiomas le avisarán si una variable permanece sin inicializar antes de su uso. Consulte las especificaciones de idioma y los foros para ver si no se preocupa innecesariamente.