Cuándo capitalizar sus constantes de JavaScript

Muchas guías de estilo de JavaScript sugieren usar mayúsculas en los nombres constantes. Personalmente, rara vez veo esta convención utilizada donde pensé que debería estar. Esto se debió a que mi definición de constante estaba un poco fuera de lugar. Decidí investigar un poco y familiarizarme un poco con esta convención.

¿Cómo definimos el término "constante"?

En programación, una constante es algo que no cambia.

Es un valor que no puede ser alterado por el programa durante la ejecución normal.

Entonces, ¿JavaScript nos da una forma de declarar un valor que no se puede cambiar? Antes de responder a esto, veamos las raíces de esta convención.

La convención de mayúsculas tiene sus raíces en C

C es un lenguaje compilado. Esto significa que otro programa convierte todo su código en código de máquina antes de que se ejecute.

JavaScript, por otro lado, es un lenguaje interpretado. Un intérprete lee su código, línea por línea, mientras se ejecuta.

La diferencia entre compilación e interpretación juega un papel en cómo declaramos valores constantes en C.

En C, puedo declarar una variable como esta:

int hoursInDay = 24;

O una constante como esta:

#define hoursInDay 24

El segundo ejemplo se llama constante simbólica . Las constantes simbólicas pueden ser una secuencia de caracteres, una constante numérica o una cadena. También se denominan valores primitivos. Los valores primitivos en JavaScript son cadenas, números, booleanos, nulo, indefinido, símbolo (que no debe confundirse con constantes simbólicas) y big int.

Ahora, revisemos la compilación.

Antes de la compilación, hay una fase de compilación previa. Aquí, el precompilador reemplaza todas las instancias de constantes simbólicas con el valor respectivo. El compilador nunca sabe lo que escribió el programador hoursInDay. Solo ve el número 24.

Las mayúsculas ayudan al programador a ver estos valores verdaderamente constantes.

#define HOURS_IN_DAY 24

Las constantes de JavaScript son diferentes a las constantes simbólicas

Antes de ES6, almacenábamos la mayoría de los valores en variables, incluso aquellos valores que deseaba que permanecieran constantes.

La capitalización nos ayudó a ver los valores que queríamos que se mantuvieran constantes.

var HOURS_IN_DAY = 24; var hoursRemaining = currentHour - HOURS_IN_DAY; var MY_NAME = 'Brandon'; MY_NAME = ... // oops don't want to do this.

ES6 introdujo la declaración const que no es una “constante” en el sentido más puro.

ES6 agregó los términos consty letcomo formas de crear variables con diferentes intenciones.

Con esos dos términos, puede pensar que:

  1. no es necesario poner nada en mayúscula, ya que podemos ver claramente qué variables deben permanecer iguales, o
  2. debemos poner en mayúscula todo lo que declaramos const.

Por definición, constcrea una constante que es una referencia de solo lectura a un valor. Esto no significa que el valor que tiene sea inmutable. Solo dice que el identificador de variable no se puede reasignar.

En otras palabras, algunas constreferencias pueden cambiar.

const firstPerson = { favoriteNumber: 10, }; const secondPerson = firstPerson; console.log(secondPerson.favoriteNumber); //10 firstPerson.favoriteNumber +=1; console.log(secondPerson.favoriteNumber); //11

El ejemplo anterior muestra que la declaración constno garantiza que la variable sea inmutable.

constsolo evita que intentemos reasignar el nombre de la variable. No impide que cambie la propiedad del objeto. Recuerde: los objetos se pasan por referencia.

// "TypeError: Assignment to constant variable."secondPerson = 'something else'; const secondPerson = 'Me' secondPerson = 'something else';

Entonces, para JavaScript, tenemos que ir más allá de simplemente buscar una constdeclaración. Necesitamos hacer dos preguntas para determinar si una variable es una constante:

  1. ¿El valor de la variable es primitivo?
  2. ¿Tenemos la intención de mantener el nombre de la variable apuntando al mismo valor en todo nuestro programa?

Si la respuesta es sí a ambos, debemos declarar la variable con consty podemos poner el nombre en mayúscula.

Fíjate que dije "puede". El espíritu de esta convención proviene de diferentes lenguajes que tenían constantes reales. JavaScript no lo hace. Al menos en el sentido más puro. Esta puede ser la razón por la que ve esta convención con menos frecuencia de lo esperado. Airbnb tiene una gran sección en su guía de estilo con su versión aquí.

La conclusión clave es reconocer que la definición de una constante en JavaScript tiene que incluir las intenciones del programador.

Además, no todas las convenciones de un idioma tienen sentido en un idioma diferente. Por último, solo puedo imaginar que se usaron muchas convenciones mucho antes de que los IDE tuvieran las capacidades que tienen hoy. Estoy convencido de que mi IDE se complace en decirme que estoy equivocado. Sucede mucho.

¡Gracias por leer!

woz

Sigueme en Twitter.

Notas

  • Quizás se pregunte por qué no lo utilicé PIen ninguno de estos ejemplos. Los acrónimos, especialmente los acrónimos de dos letras, tienden a estar siempre en mayúscula o siempre en minúsculas por convención.