array - diferencia entre var y const javascript
Condicionalmente inicializando una constante en Javascript. (4)
Si el operador ternario no es una opción por su ilegibilidad, la única otra opción es IIFE, que es incómoda pero se puede leer con fluidez:
const x = (() => {
if (condition)
return 5
else
return 10
})();
La semántica de const
es que se asigna una vez. Se debe let
para este caso de uso:
let x;
if(condition) x = 5;
else x = 10;
Desde mi experiencia personal, ~ 95% de las variables son const
. Si una variable tiene que ser let
, solo deja que sea ella misma; La probabilidad de errores causados por reasignaciones accidentales es insignificante.
ES6 en adelante tenemos const
.
Esto no esta permitido:
const x; //declare first
//and then initialize it
if(condition) x = 5;
else x = 10;
Esto tiene sentido porque nos impide usar la constante antes de que se inicialice.
Pero si lo hago
if(condition)
const x = 5;
else
const x = 10;
x se convierte en ámbito de bloque.
Entonces, ¿cómo crear condicionalmente una constante?
Su problema, como saben, es que una const
debe inicializarse en la misma declaración en la que se declaró.
Esto no significa que el valor que asigne a su constante tenga que ser un valor literal. Podría ser cualquier declaración válida realmente - ternaria:
const x = IsSomeValueTrue() ? 1 : 2;
¿O tal vez simplemente asignarlo al valor de una variable?
let y = 1;
if(IsSomeValueTrue()) {
y = 2;
}
const x = y;
Por supuesto, también podría asignarlo al valor de retorno de una función:
function getConstantValue() {
return 3;
}
const x = getConstantValue();
Así que hay muchas maneras de hacer que el valor sea dinámico, solo debe asegurarse de que solo se asigne en un solo lugar.
Sugiero esta solución con una implementación de Singleton Pattern :
var Singleton = (function () {
var instance;
function createInstance() {
// all your logic here
// so based on your example:
// if(condition) return 5;
// else return 10;
}
return {
getInstance: function () {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
const x = Singleton.getInstance();
Suponiendo que se va a declarar la const
en ambas instancias, podría usar una asignación ternaria:
const x = condition ? 5 : 10;