Introducción
En el post JS: Introducción a la programación, se hace una distinción entre la Programación y las herramientas que esta aporta para la realización de los distintos programas y los Lenguajes de Programación.
Un Lenguaje de Programación debe permitir que usemos las herramientas de Programación. En esta oportunidad vamos a ver cómo hace JavaScript para permitirnos trabajar con las variables.
Tipos de datos
Empecemos recordando que la finalidad de un Lenguaje de Programación es permitir la comunicación entre el Programador/Desarrollador y el elemento encargado de ejecutar las acciones que este establece al momento de escribir el código. Por tanto, escribir un programa implica dar órdenes (escribir sentencias). En el caso de JavaScript, elegimos este Lenguaje, con la intención de escribir sentencias (dar órdenes) que los distintos navegadores web puedan entender.
Al describir el acto de programar dijimos que existía para permitirnos plantear soluciones a problemas cotidianos. Imaginemos que estamos buscando mejorar el registro del pago de salarios de los empleados de una empresa. Desde la programación lo primero que debemos preguntarnos es ¿Qué tarea de realizar?, y ¿Qué datos necesito para llevarla a cabo?
La primera respuesta es: Mejorar un registro. Esto, a su vez, nos lleva a tener que definir qué es un registro. Aproximadamente, podríamos decir que un registro es un documento que contiene información detallada de forma tal que es sencillo entender la funcionalidad de los datos que contiene.
Entonces, habiendo respondido a la primera pregunta, es fácil dilucidar que nuestro registro debería contener, por lo menos, los siguientes datos: fecha de pago, nombre del empleado y monto abonado.
Ahora bien, al leer fecha de pago, lo más probable, es que hayas pensado en alguna forma de expresar un día del calendario, por ejemplo, 08/03/2023. De forma similar, leyendo nombre del empleado, te imaginaste "Juan Pérez"; mientras que monto abonado habrá evocado algo como $90000.
En programación, a esos conceptos que imaginaste, se los conoce como tipos de dato.
Los tipos de datos son representaciones mentales de un valor a manipular. Es decir, cuando imaginaste fecha de pago, independientemente de cuál, sabías que querías representar un día del calendario. Lo mismo con nombre del empleado y monto abonado. No necesitaste saber exactamente qué valor porque, al decir nombre del empleado, se te vino a la cabeza el nombre de una persona. O con monto abonado, automáticamente, supusiste que debía haber un número.
Los tipos de datos, entonces, representan la intención de trabajar con ciertos valores en lugar de otros. Todos los Lenguajes de Programación cuentan con su propio set de tipos de datos conocidos como datos primitivos. Además, al programar, es posible crear tipos de datos personalizados para cada caso. Estos son conocidos como tipos de datos abstractos.
JavaScript cuenta con los siguientes datos primitivos:
Además, es posible crear los siguientes tipos de datos abstractos:
Los tipos de datos, y en consecuencia los valores que representan, pueden ser utilizados siempre que se los necesite. Pero si es necesario reutilizarlos a lo largo de nuestro programa, debemos almacenarlo en la memoria. Para ello contamos con las variables.
Variables
Una variable puede ser definida como «Espacio en la memoria RAM donde se almacenará un valor que podrá cambiar durante la ejecución del programa» ¿Qué significa esto?
Vamos a empezar por entender que los navegadores (elementos con los que quiero comunicarme cuando escribo en Lenguaje JavaScript) son programas de computadora y, como tales, consumen recursos de la misma para funcionar. Uno de esos recursos es la memoria RAM.
La memoria RAM es un componente que permite que las computadoras (tablets, teléfonos, etc.) realicen su trabajo. Todos los programas (y aplicaciones) que usamos deben pedir prestada una porción de la misma para poder funcionar. Cuando creamos una variable en JavaScript, lo que hacemos es pedir al navegador que nos preste una porción de esa memoria que le pidió a la computadora (o tablet, celular, etc.) para poder almacenar los distintos datos que necesitamos para trabajar.
Ahora bien, en este post, definimos a la variable como un conjunto de dos elementos: un nombre identificador y un valor contenido. Generar una variable en JavaScript, entonces, implica proporcionar esos elementos.
El armado de variables está divido en dos partes: la declaración, momento en el cual otorgamos el nombre identificador, y la asignación, que es cuando indicamos qué dato queremos que se almacene en dicha variable.
Desde ECMAScript 6, existen tres palabras reservadas (una palabra reservada es una palabra que el Lenguaje asigna para realizar una acción y los programadores no puede utilizar para hacer otra cosa) para indicar que queremos declarar una variable: var, let y const.
- var - forma antigua de declarar variables. Se conserva por compatibilidad con navegadores antiguos. En la actualidad se recomienda no evitarla. Necesaria si para escribir en ECMAScript 5
- let - reemplaza el funcionamiento de var.
- const - permite declarar variables que impiden el cambio de los valores almacenados.
La diferencia entre la elección de una u otra palabra reservada para indicar la creación de una variable es un tema que abordaremos en otro post. Por ahora, lo que nos interesa es dejar en claro que si uso let, puedo cambiar el dato almacenado; mientras que con const, una vez que almacenamos un dato, este ya no puede volver a cambiar. Además, con let es posible crear una variable sin asignarle (guardar) un valor de forma inmediata, pero a las variables con const tengo que, sí o sí, guardarle (asignar) un valor para evitar errores.
Tipo de dato de variable
Declarar una variable, independientemente de cuál sea la palabra reservada que se utiliza, es necesario darle un nombre. Para ello debemos considerar las siguientes reglas:
- Deben comenzar por letra, $ o _
- Solo puede contener letras, números, $ y _
- Son key sensitive - Si declaramos la variable nombre, no podemos usar Nombre como sinónimo.
- No deben ser palabras reservadas - Por ejemplo, el nombre de una variable no puede ser let
- Se recomienda sean descriptivas - Si queremos guardar un dato que haga referencia a una fecha. Un buen nombre para la variable que almacena ese dato podría ser fecha
Tipo de dato de variable
En este punto ya conocemos qué es un tipo de dato y cómo las variables sirven para reutilizar los valores que estos representan. En este post, definíamos a JavaScript como un Lenguaje de tipado débil y dinámico, es decir, en JavaScript es posible que a una variable le asignemos un tipo de dato y, más adelante, en esa misma variable guardemos un tipo de dato distinto.
Para entender este fenómeno, debemos empezar por explicar que cuando almacenamos un tipo de dato en una variable, esta pasa a ser conocida como variable de tipo x. Por ejemplo, imaginemos que declaramos una variable llamada nombre y le asignamos el dato "Pepe". "Pepe", es un dato de tipo string, por lo tanto, nombre es una variable de tipo string.
También sabemos que en JavaScript es posible no almacenar un dato de forma inmediata (si declaramos la variable con let). Además, vimos que existe un tipo de dato llamado undefined que representa la ausencia de un tipo de dato y un valor.
Cuando optamos por declarar una variable, pero no asignarle un valor en la misma sentencia. JavaScript interpreta que esa es una variable de tipo undefined. Es decir, JavaScript sabe que debe pedirle al navegador una porción de memoria para almacenar algo, aunque no sepa qué queremos almacenar. Algo así como armar una caja vacía con la intención de, más adelante, poner cosas dentro,
En el momento en que decidamos asignar un dato a la variable de tipo undefined. Esta pasa a ser una variable del tipo de dato asignado. Inclusive, es posible cambiar nuevamente el tipo de dato de esa misma variable si le asignamos otro.
Describir a JavaScript como un Lenguaje débilmente tipado es una referencia a que no necesitamos indicar qué tipo de dato almacenaremos en una variable; asimismo, indicar que es un Lenguaje dinámico hace referencia a la capacidad de cambiar el tipo de dato de una misma variable simplemente modificando el tipo de dato que tiene asignado.
Variable de tipo null
En la tabla de tipos de datos primitivos podemos encontrar al dato null. La definición de este tipo de dato implica que se necesita una variable, que tenga un tipo de dato asignado, pero sin valor.
Si analizamos detenidamente cómo hace JavaScript para asignar un tipo de dato a una variable, podremos ver que toda variable toma el tipo de dato correspondiente al valor que almacena (por eso, si no guarda un valor obtenemos una variable del tipo undefined).
Volvamos sobre la definición de dato null «variable con tipo de dato asigno, pero sin valor». En JavaScript, si no asigno un valor, la variable pasa, automáticamente, a ser una variable de tipo undefined. Por el contrario, si le asigno un valor, la variable se convierte en una variable del tipo correspondiente al valor asignado.
Entonces, ¿en qué momento obtendremos una variable de tipo null?. Esencialmente, la aparición de una variable de tipo null (que nosotros no declaramos de esa forma deliberadamente) es un indicativo de que tenemos un error en nuestro programa y debemos corregirlo.
Redes