La mayor parte del tiempo, una aplicación JavaScript necesita trabajar con información. Dos ejemplos:
- Una tienda en lÃnea â La información puede incluir los bienes a la venta y un âcarrito de comprasâ.
- Una aplicación de chat â La información puede incluir los usuarios, mensajes, y mucho más.
Utilizamos las variables para almacenar esta información.
Una variable
Una variable es un âalmacén con un nombreâ para guardar datos. Podemos usar variables para almacenar golosinas, visitantes, y otros datos.
Para generar una variable en JavaScript, se usa la palabra clave let.
La siguiente declaración genera (en otras palabras: declara o define) una variable con el nombre âmessageâ:
let message;
Ahora podemos introducir datos en ella, utilizando el operador de asignación =:
let message;
message = 'Hola'; // almacenar la cadena 'Hola' en la variable llamada message
La cadena ahora está almacenada en el área de la memoria asociada con la variable. La podemos acceder utilizando el nombre de la variable:
let message;
message = 'Hola!';
alert(message); // muestra el contenido de la variable
Para ser concisos, podemos combinar la declaración de la variable y su asignación en una sola lÃnea:
let message = 'Hola!'; // define la variable y asigna un valor
alert(message); // Hola!
También podemos declarar múltiples variables en una sola lÃnea:
let user = 'John', age = 25, message = 'Hola';
Esto puede parecer más corto, pero no lo recomendamos. Por el bien de la legibilidad, por favor utiliza una lÃnea por variable.
La versión de lÃneas múltiples es un poco más larga, pero se lee más fácil:
let user = 'John';
let age = 25;
let message = 'Hola';
Hay quienes prefieren definir múltiples variables en estilo multilÃnea:
let user = 'John',
age = 25,
message = 'Hola';
⦠o con el estilo âcoma primeroâ:
let user = 'John'
, age = 25
, message = 'Hola';
Técnicamente, todas estas variantes hacen lo mismo. Asà que, es cuestión de gusto personal y preferencia estética.
var en vez de letEn scripts más viejos, a veces se encuentra otra palabra clave: var en lugar de let:
var mensaje = 'Hola';
La palabra clave var es casi lo mismo que let. También hace la declaración de una variable, aunque de un modo ligeramente distinto, y más antiguo.
Existen sutiles diferencias entre let y var, pero no nos interesan en este momento. Cubriremos el tema a detalle en el capÃtulo La vieja "var".
Una analogÃa de la vida real
Podemos comprender fácilmente el concepto de una âvariableâ si nos la imaginamos como una âcajaâ con una etiqueta de nombre único pegada en ella.
Por ejemplo, la variable message puede ser imaginada como una caja etiquetada "message" con el valor "Hola!" dentro:
Podemos introducir cualquier valor a la caja.
También la podemos cambiar cuantas veces queramos:
let message;
message = 'Hola!';
message = 'Mundo!'; // valor alterado
alert(message);
Cuando el valor ha sido alterado, los datos antiguos serán removidos de la variable:
También podemos declarar dos variables y copiar datos de una a la otra.
let hello = 'Hola mundo!';
let message;
// copia 'Hola mundo' de hello a message
message = hello;
// Ahora, ambas variables contienen los mismos datos
alert(hello); // Hola mundo!
alert(message); // Hola mundo!
Una variable debe ser declarada solamente una vez.
Una declaración repetida de la misma variable es un error:
let message = "This";
// 'let' repetidos lleva a un error
let message = "That"; // SyntaxError: 'message' ya fue declarado
Debemos declarar una variable una sola vez y desde entonces referirnos a ella sin let.
Es interesante notar la existencia de la programación funcional. Los lenguajes funcionales âpurosâ, como Haskell, prohÃben cambiar el valor de las variables.
En tales lenguajes, una vez que la variable ha sido almacenada âen la cajaâ, permanece allà por siempre. Si necesitamos almacenar algo más, el lenguaje nos obliga a crear una nueva caja (generar una nueva variable). No podemos reusar la antigua.
Aunque a primera vista puede parecer un poco extraño, estos lenguajes son muy capaces de desarrollo serio. Más aún: existen áreas, como la computación en paralelo, en las cuales esta limitación otorga ciertas ventajas.
Nombramiento de variables
Existen dos limitaciones de nombre de variables en JavaScript:
- El nombre únicamente puede incluir letras, dÃgitos, o los sÃmbolos
$y_. - El primer carácter no puede ser un dÃgito.
Ejemplos de nombres válidos:
let userName;
let test123;
Cuando el nombre contiene varias palabras, se suele usar el estilo camelCase (capitalización en camello), donde las palabras van pegadas una detrás de otra, con cada inicial en mayúscula: miNombreMuyLargo.
Es interesante notar que el sÃmbolo del dólar '$' y el guion bajo '_' también se utilizan en nombres. Son sÃmbolos comunes, tal como las letras, sin ningún significado especial.
Los siguientes nombres son válidos:
let $ = 1; // Declara una variable con el nombre "$"
let _ = 2; // y ahora una variable con el nombre "_"
alert($ + _); // 3
Ejemplos de nombres incorrectos:
let 1a; // no puede iniciar con un dÃgito
let my-name; // los guiones '-' no son permitidos en nombres
Dos variables con nombres manzana y MANZANA son variables distintas.
Es posible utilizar letras de cualquier alfabeto, incluyendo letras del cirÃlico, logogramas chinos, etc.:
let Ð¸Ð¼Ñ = '...';
let æ = '...';
Técnicamente, no existe error aquÃ. Tales nombres están permitidos, pero internacionalmente existe la convención de utilizar el inglés para el nombre de las variables. Incluso si estamos escribiendo un script pequeño, este puede tener una larga vida por delante. Gente de otros paÃses puede necesitar leerlo en algún momento.
Hay una lista de palabras reservadas, las cuales no pueden ser utilizadas como nombre de variable porque el lenguaje en sà las utiliza.
Por ejemplo: let, class, return, y function están reservadas.
El siguiente código nos da un error de sintaxis:
let let = 5; // no se puede le nombrar "let" a una variable ¡Error!
let return = 5; // tampoco se le puede nombrar "return", ¡Error!
use strictNormalmente, debemos definir una variable antes de utilizarla. Pero, en los viejos tiempos, era técnicamente posible crear una variable simplemente asignando un valor sin utilizar âletâ. Esto aún funciona si no ponemos âuse strictâ en nuestros scripts para mantener la compatibilidad con scripts antiguos.
// nota: no se utiliza "use strict" en este ejemplo
num = 5; // se crea la variable "num" si no existe antes
alert(num); // 5
Esto es una mala práctica que causarÃa errores en âstrict modeâ:
"use strict";
num = 5; // error: num no está definida
Constantes
Para declarar una variable constante (inmutable) use const en vez de let:
const myBirthday = '18.04.1982';
Las variables declaradas utilizando const se llaman âconstantesâ. No pueden ser alteradas. Al intentarlo causarÃa un error:
const myBirthday = '18.04.1982';
myBirthday = '01.01.2001'; // ¡error, no se puede reasignar la constante!
Cuando un programador está seguro de que una variable nunca cambiará, puede declararla con const para garantizar esto y comunicarlo claramente a los demás.
Constantes mayúsculas
Existe una práctica utilizada ampliamente de utilizar constantes como aliases de valores difÃciles-de-recordar y que se conocen previo a la ejecución.
Tales constantes se nombran utilizando letras mayúsculas y guiones bajos.
Por ejemplo, creemos constantes para los colores en el formato âwebâ (hexadecimal):
const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_BLUE = "#00F";
const COLOR_ORANGE = "#FF7F00";
// ...cuando debemos elegir un color
let color = COLOR_ORANGE;
alert(color); // #FF7F00
Ventajas:
COLOR_ORANGEes mucho más fácil de recordar que"#FF7F00".- Es mucho más fácil escribir mal
"#FF7F00"queCOLOR_ORANGE. - Al leer el código,
COLOR_ORANGEtiene mucho más significado que#FF7F00.
¿Cuándo se deben utilizar letras mayúsculas para una constante, y cuando se debe nombrarla de manera normal? Dejémoslo claro.
Ser una âconstanteâ solo significa que el valor de la variable nunca cambia. Pero hay constantes que son conocidas previo a la ejecución (como el valor hexadecimal del color rojo) y hay constantes que son calculadas en el tiempo de ejecución, pero no cambian después de su asignación inicial.
Por ejemplo:
const pageLoadTime = /* el tiempo que tardó la página web para cargar */;
El valor de pageLoadTime no está preestablecido. Como no se conoce antes de cargar la página, la nombramos normalmente. Pero podemos declararla como constante, porque después de su asignación inicial, no cambiará.
En otras palabras, las constantes en mayúsculas son utilizadas solamente como alias para valores invariables y preestablecidos.
Nombrar cosas correctamente
Estando en el tema de las variables, existe una cosa de mucha importancia.
Una variable debe tener un nombre claro, de significado evidente, que describa el dato que almacena.
Nombrar variables es una de las habilidades más importantes y complejas en la programación. Un vistazo rápido a el nombre de las variables nos revela cuál código fue escrito por un principiante o por un desarrollador experimentado.
En un proyecto real, se pasa mucho más tiempo modificando y extendiendo una base de código existente que escribiendo algo nuevo desde cero. Cuando regresamos a nuestro código luego de un tiempo, es mucho más fácil encontrar información que está bien etiquetada. O en otras palabras, cuando las variables tienen los nombres adecuados.
Por favor, dedica tiempo para pensar un nombre correcto para una variable antes de declararla. Hacer esto te rendirá muy bien.
Algunas reglas buenas para seguir:
- Usa términos legibles para humanos como
userNamepshoppingCart. - Evita abreviaciones o nombres cortos
a,b,c, a menos que realmente sepas lo que estás haciendo. - Crea nombres que describan al máximo lo que son y sean concisos. Ejemplos de nombres malos son
datayvalue. Estos nombres no nos dicen nada, solo son adecuados en el contexto de un código que deje excepcionalmente obvio cuál dato o valor está referenciando la variable. - Ponte de acuerdo con tu equipo, y con tu propia mente, cuáles términos se utilizarán. Si a un visitante se lo llamara âuserâ, debemos llamar las variables relacionadas
currentUseronewUseren vez decurrentVisitoronewManInTown.
¿Suena simple? De hecho lo es, pero no es tan fácil crear nombres de variables descriptivos y concisos a la hora de practicar. Inténtelo.
Una última nota. Existen programadores haraganes que, en vez de declarar una variable nueva, tienden a reusar las existentes.
El resultado de esto es que sus variables son como cajas en las cuales la gente introduce cosas distintas sin cambiar sus etiquetas. ¿Que existe dentro de la caja? ¿Quién sabe? Necesitamos acercarnos y revisar.
Dichos programadores se ahorran un poco durante la declaración de la variable, pero pierden diez veces más a la hora de depuración.
Una variable extra es algo bueno, no algo diabólico.
Los navegadores modernos y los minificadores de JavaScript optimizan el código, asà que esto no impacta en el rendimiento. Utilizar diferentes variables para distintos valores incluso puede ayudar a optimizar tu código.
Resumen
Podemos declarar variables para almacenar datos al utilizar las palabra clave var, let, o const.
letâ es la forma moderna de declaración de una variable.varâ es la declaración de variable de vieja escuela. Normalmente no lo utilizamos en absoluto. Cubriremos sus sutiles diferencias conleten el capÃtulo La vieja "var", por si lo necesitaras.constâ es comolet, pero una vez asignado, el valor de la variable no podrá alterarse.
Las variables deben ser nombradas de tal manera que entendamos fácilmente lo que está en su interior.
Comentarios
<code>, para varias lÃneas â envolverlas en la etiqueta<pre>, para más de 10 lÃneas â utilice una entorno controlado (sandbox) (plnkr, jsbin, codepenâ¦)