Variables

Sin lugar a dudas, una de las herramientas con las que cualquier programador debe contar a la hora de desarrollar código útil, son las variables. Sin ellas, los lenguajes de programación perderían completamente la capacidad de resolver problemas complejos, además de que programar resultaría en una tarea engorrosa y más compleja de lo que necesitaría serlo.

Para entender mejor el porqué de su importancia sería bueno que lo veamos desde la perspectiva de un problema: Ahora que ya conocen la sentencia alert para mostrar mensajes, consideren que se les pide que su programa muestre en la pantalla un saludo personalizado. Esto es, que una persona le dice al programa como se llama y este lo saluda mostrando “Hola” y a continuación, su nombre. Por ejemplo: “Hola Juan Pérez”.

En principio parece algo sencillo de lograr, pero con lo que sabemos hasta ahora, serían capaces de resolverlo?

Entonces… ¿Qué son las variables?

Desde el punto de vista de los “fierros” (hardware), una variable no es más que un espacio de memoria donde podemos guardar datos. Pero, la cosa no termina ahí, porque lo interesante de las variables es que podemos darles un nombre. De manera que, cada vez que escribamos ese nombre en nuestros programas, la computadora va a entender que nos estamos refiriendo a ese exacto espacio de la memoria donde tenemos guardados los datos.

Aún no parecen muy sorprendidos por la INCREÍBLE revelación de que le podamos dar nombres a las variables… Para que quede más claro, les voy a mostrar un pequeño ejemplo de como los fierros entienden los espacios de memoria VS como lo podemos entender los programadores:

Representación de los espacios de memoria

Como pueden ver, hay diferentes formas de referirnos a estos espacios de memoria dependiendo de la perspectiva que tomemos. Si somos el hardware, estaremos viendo estos espacios de memoria como una serie de largos números binarios que identifican a cada espacio. Ahora, si lo vemos como el sistema operativo, los identificadores cambian de esos largos números binarios, a una serie de números y letras un poco extraños de leer (sobre todo por esas “x” entre medio de los números) que se conocen como números hexadecimales. Por último, desde el punto de vista del programador, nos encontramos con nombres sencillos que identifican a los distintos espacios de memoria y que nos ahorran el trabajo de tener que recordar en cuál identificador hexadecimal está guardado el dato de un resultado, o de cuantos unos y ceros tenemos que escribir para decirle al programa, en números binarios, donde debe guardar un dato en la memoria.

Se podrán imaginar lo complicado que sería escribir 1010100000 o 0x002b0, cada vez que queramos guardar o recuperar un dato. Sin mencionar que, tendríamos que recordar esa secuencia de números para poder usarla en nuestro código… horrible!.

Por qué necesitamos saberlo?

Bien, ahora que ya sabemos que sin las variables estaríamos perdidos, como así también qué es lo que son… debemos entender el por qué?.
Necesitamos saber usar las variables ya que nos permiten guardar y recuperar datos dentro de nuestro programa. Desde ya, puedo ver que no les parece mucho...Miren, volvamos al problema que planteamos al principio del tema: El programa que debe saludar usando el nombre del usuario.

Ahora debería serles más sencillo pensar una posible solución :).

Veamos, sin entrar mucho en detalle, un paso a paso de lo que deberíamos hacer para lograrlo:

  1. Nuestro programa debería comunicarle al usuario que ingrese su nombre, mediante un mensaje.
  2. Obtener el nombre del usuario.
  3. Esa información deberíamos guardarla en una variable que tenga un nombre que nos sea fácil de identificar qué es lo que contiene. Por ejemplo nombreUsuario.
  4. Finalmente, podemos usar dos alert para construir el saludo. En un alert mostramos el mensaje “hola” y el segundo lo usamos para que muestre el nombre que guardamos en la variable nombreUsuario.

Y voila! problema resuelto !! :D
Como pueden ver, las variables nos permiten guardar, asignar, representar y mostrar información relevante en cualquier parte de nuestro código o programa, de ahí que resultan ser muy importantes para los programadores ;).

Cómo las utilizamos?

Creo que ya pude convencerlos de la importancia de las variables, al punto que se están muriendo por poder usarlas!! No se preocupen que la espera ya terminó, ya mismo les explico cómo pueden usarlas en sus programas.

En Javascript existen una serie de palabras que le avisan al lenguaje que estamos creando una variable. Este tipo de palabras se conocen como “palabras reservadas” y existen en todos los lenguajes de programación. Se les dicen palabras reservadas porque éstas no pueden ser usadas para otra cosa, por ejemplo como nombre de una variable.
Quédense tranquilos que si llegan a hacerlo, la computadora no va a explotar… sólo su programa no funcionará o Javascript les dirá que hay un error :).

Las palabras reservadas para crear variables son:
var Si querés que tu código funcione en navegadores antiguos, usala!
let Variables declaradas con let no pueden ser re-declaradas. Y deben ser declaradas antes de usarse
const Tampoco pueden ser re-declaradas, ni tampoco re-asignadas

Tip

Al proceso de crear una variable también se lo conoce como declaración

Veamos como podemos usarlo en el código:

Veamos que pasa con el orden de las declaraciones

A la hora de programar, es importante que consideremos la forma en la cual la computadora interpreta nuestro código. En JavaScript, cada sentencia o instrucción que escribimos sigue un orden, que está definido por la disposición de cada sentencia. Para entender esto, vamos a salir un poco del campo de la informática y vayamos a la cocina por un momento.

Cuando queremos preparar algún platillo sin tener ningún conocimiento sobre cómo hacerlo, solemos recurrir a una receta que nos indique el paso a paso para poder realizarlo. De esta manera, (y con receta en mano) solo tenemos que ir al paso 1, luego al paso 2, y así. Aquí aparece una cuestión importante, que es el orden. Porque si no seguimos los pasos ordenadamente, lo más probable es que lo que preparemos termine siendo incomible. Si batimos antes de agregar los ingredientes, si ponemos en el horno sin haberle agregado los huevos, o si desmoldamos antes de cocinar, el resultado es un desastre.

Podríamos pensar que, al sentarnos a programar en realidad estamos creando una receta que nuestra computadora tiene que preparar. Y si queremos usar una variable deberíamos, en un paso previo, declararla con la palabra reservada, ó si pretendemos mostrar algo por pantalla, primero tendríamos que tener algo que mostrar. El orden importa!

Un ejemplo:

Considerando que ya saben usar un poco más las variables. Me parece un buen momento para recordar el paso a paso que resolvimos ligeramente más arriba:

  1. Nuestro programa debería comunicarle al usuario que ingrese su nombre, mediante un mensaje.
  2. Obtener el nombre del usuario.
  3. Esa información deberíamos guardarla en una variable que tenga un nombre que nos sea fácil de identificar qué es lo que contiene. Por ejemplo nombreUsuario.
  4. Finalmente, podemos usar dos alert para construir el saludo. En un alert mostramos el mensaje “hola” y el segundo lo usamos para que muestre el nombre que guardamos en la variable nombreUsuario.

Este paso a paso debería funcionar … en teoría … si … pero … y quizás alguien ya se haya dado cuenta … ¿Cómo hacemos para que nuestro programa obtenga esa información del usuario?

Separador Visual

Entrada de datos

Hace no mucho tiempo, aprendimos que nuestros programas pueden “comunicarse” con el usuario mediante los mensajes que muestra por pantalla, la sentencia alert. Puede que algunos de ustedes ya se lo hayan planteado: Sí hay una forma de hacer llegar información desde el programa hacia el usuario … también debería haber una forma que vaya desde el usuario hacia el programa… no?
Efectivamente, así como existe el alert para que el programa nos entregue información, también existe una sentencia que nos permite darle datos al programa.

La sentencia prompt le da al usuario una ventana en la cual escribir los datos que desea hacerle llegar al programa. Por sí sólo, el prompt no es muy útil ya que luego de que escribamos en él y le demos aceptar en la ventana, lo que sea que hayamos escrito se perderá en el olvido. Pero, si combinamos el poder de las variables con la sentencia prompt podremos ver el verdadero potencial de las variables!. Con estas dos herramientas de nuestro lado, el programa ahora es capaz, no sólo de guardar información sino que también, ahora puede pedirle los datos directamente al usuario!!

Desarrollemos nuestro paso a paso por completo:

Ahora que son duchos con el arte de las variables, ¿Se animan a modificar el programa anterior para que también pida la edad, la altura del usuario y muestre todos los datos?

Separador Visual

Tipos de datos

Dado que ustedes ya la tiene re clara con el concepto de variables y quieren saber más al respecto, les comento que además de poder guarda datos en una variable, también podemos especificar que tipo de dato queremos que guarde. Es decir que le puedo pedir a una variable sólo me deje guardar en ella frutas, por lo que no voy a poder pedirle que guarde una lechuga… podré guardar un tomate?... (les dejo la inquietud). La razón por la que les cuento esto es porque existen lenguajes de programación que únicamente nos dejan crear una variable sólo si primero le decimos de que tipo va a ser la información que vamos a almacenar en ella. A estos lenguajes se les conoce como “fuertemente tipados”. Javascript se trata de un lenguaje “levemente tipado” por lo que ya se imaginarán que no le importa mucho que le digamos el tipo que va a tener una variable.

Ahora bien, que a Javascript no le importen los tipos de sus variables no quiere decir que no Javascript no tenga tipos de datos. Estos le ayudan al lenguaje, y al programador, a comprender los datos que está utilizando y como interpretarlos. Podrán entender la importancia de que Javascript pueda diferencia un texto de unos números, verdad?...No?

Miren la siguiente situación:

Pueden ver que la diferencia en el código es sútil, pero el cambio en el resultado es bastante importante. En el primer caso Javascript entiende que lo que vamos a guardar es un texto, por lo que interpreta que los número que aparecen ahí no son más que caracteres de una palabra. Mientras que en el otro caso, se entiende que son números y que se esta realizando una operación matemática con ellos.

Lista de tipos admitidos en Javascript:
Number Es capaz de almacenar números de punto flotante entre 2^-1074 y 2^1024, pero sólo puede almacenar con seguridad números enteros en el rango -(2^53 - 1) a 2^53 - 1.
String El tipo String de JavaScript se utiliza para representar datos textuales. A diferencia de algunos lenguajes de programación (como en C), las cadenas de texto en JavaScript son inmutables. Esto significa que una vez creada la cadena, no es posible modificarla.
Symbol Un símbolo es un valor primitivo único e inmutable
Null El tipo Null tiene exactamente un valor: null
Undefined Una variable a la que no se le ha asignado un valor tiene el valor indefinido
Boolean El booleano representa una entidad lógica y puede tener dos valores: verdadero y falso (true, false)

En javaScript no hace falta declarar ningún tipo a la hora de declarar una variable, ya que es capaz de entender e interpretar el tipo en función del dato que se le pide almacenar. Esto nos permite que una variable pueda cambiar el tipo de dato fácilmente dependiendo de lo que le asignemos:

Separador Visual

Operadores

Bueno, ya incorporamos el concepto de variables, que són y el porqué de su importancia. También sabemos que hay diferentes tipos de datos que pueden ser tomados por las variables… ya sabemos todo, no?. Casi, lo último que nos queda por aprender son los operadores.
Los operadores son las operaciones podemos realizar con los tipos de datos, por ejemplo si tenemos dos números y queremos multiplicarlos, simplemente podemos utilizar el operador *. Entonces Javascript va a entender que se deben multiplicar esos números, sencillo…Ahora que pasa si usamos el mismo operador pero en lugar de números, usamos Strings? Cómo se pueden multiplicar dos Strings? Si alguno sabe me avisa porque yo no lo sé.
Pueden ver que algunos operadores sólo tiene sentido usarlos si los empleamos con los tipos de datos correctos.

En javascript existen muchos operadores diferentes, pero podemos dividirlos en los siguientes grupos:

  • Operadores Aritméticos
  • Operadores de Asignación
  • Operadores de Comparación
  • Operadores Lógicos
  • Operadores Aritméticos

    Los operadores aritméticos se utilizan para realizar operaciones aritméticas con números:

    Operador Descripción
    + suma
    - resta
    * multiplicación
    / división
    ** potencia
    ++ incrementar
    -- decrementar
    % módulo

    También se aplica

    El operador de suma + también se puede usar con String. En ese caso, el operador pasa de llamarse "suma" a llamarse "concatenar" y su función es la de unir o concatenar dos o más textos

  • let texto1 = “hola Pedro”
  • let texto2 = “cómo estás?”
  • let texto3 = texto1 + texto2; --> texto3 devuelve "hola Pedro cómo estás?
  • Veamos un código de ejemplo:

    Operadores de Asignación

    Los operadores de asignación asignan valores a las variables de JavaScript:

    Operador Ejemplo Es lo mismo que
    = x = y x = y
    += x += y x = x + y
    -= x -= y x = x - y
    *= x *= y x = x * y
    /= x /= y x = x / y
    %= x %= y x = x % y
    **= x **= y x = x ^ y

    También se aplica

    El operador += también se puede usar con String. Su función es la de unir o concatenar dos o más textos en una variable, conservando el valor que ya contenia la variable originalmente

  • let texto1 = "Hola Pedro"
  • let texto2 = "Cómo estás?"
  • let texto3 = "Mi nombre es Pablo."
  • texto3 += texto1 + texto2; --> texto3 devuelve "Mi nombre es Pablo. Hola Pedro cómo estás?"
  • Veamos un código de ejemplo:

    Operadores de Comparación

    Los operadores de comparación se utilizan para comprobar si algo es verdadero o falso:

    Operador Descripción
    == igual a
    === igual valor e igual tipo
    != no es igual
    !== no es igual en valor ni en tipo
    > mayor que
    < menor que
    >= mayor o igual a
    <= menor o igual a
    Veamos un código de ejemplo:

    Operadores Lógicos

    Los operadores lógicos, al igual que los operadores de comparación, también son usados para comprobar si algo es verdadero o falso:

    Operador Descripción
    && 'y' lógico (AND)
    || 'ó' lógico (OR)
    ! 'no' lógico (NOT)
    Veamos un código de ejemplo:
    Separador Visual

    A trabajar!

    Ahora que ya vimos el concepto de variable y como utilizarlo dentro de JavaScript, vamos a emplear los conocimientos en distintos desafios de programación que involucren variables. Para ello, ingrese a su CodeSandbox y dentro de la carpeta R2 que hicimos en el encuentro anterior, cree un archivo por cada ejercicio propuesto más abajo. Cada archivo debe tener por nombre la palabra "ejercicio_nivel_".
    Por ejemplo: ejercicio_nivel_0.js - ejercicio_nivel_1.js - ejercicio_nivel_2.js - etc

    Nivel 0: Nuestra primera variable sencilla

    Ejercicio propuesto:

    Nivel 1: Más variables!

    Ejercicio propuesto:

    Nivel 2: Nuestra primera variable con entrada

    Ejercicio propuesto:

    Nivel 3: Muchos más datos, muchos más tipos

    Ejercicio propuesto:

    Nivel 4: Aprender a comparar, comparando :)

    Ejercicio propuesto:

    Nivel 5: (NOT|AND|OR)

    Ejercicio propuesto:

    Nivel 6: Atrapando al tramposo

    Ejercicio propuesto:
    Separador Visual

    Adicionales

    Ahora que ya estás a full con los ejercicios de variables, te proponemos una serie de ejercicios adicionales para poner aún más a prueba tus conocimientos y profundizar lo aprendido. Suerte!

    Adicional 1

    Ejercicio propuesto: Juntos, no separados

    Adicional 2

    Ejercicio propuesto: Programa incompleto

    Adicional 3

    Ejercicio propuesto: Las horas del mundo

    Adicional 4

    Ejercicio propuesto: Conversor de unidades

    Adicional 5

    Ejercicio propuesto: El dato del dato del dato del dato del...
    Separador Visual

    Desafío Dipli! - ¿Cuál es el Número?

    General

    Dipli, ¿Cuál es el Número?, es un juego simple donde un contrincante juega contra Dipli. El juego consiste en adivinar el número que imaginó Dipli realizando diferentes intentos, en los cuales arriesga un valor entre 0 y 100. Si el contrincante logra acertar, ganará la partida… por el contrario ganará Dipli.

    Existen varias modalidades, con distintas innovaciones. La versión internacional, también llamada «pares polacos», está reglamentada por la Federación Internacional de Dipli, ¿Cuál es el Número? y se juega sólo con números pares y valores entre 0 y 200. También está la modalidad «Andina Patagónica», que admite valores bajo cero entre -20 y 40.

    info
    Otras reglas:
    • El contrincante no debe arriesgar más de un valor en cada intento.
    • Un jugador siempre deberá ver la respuesta de Dipli, antes de realizar un nuevo intento.
    • Dipli no puede cambiar de número durante una partida.
    • Dipli no puede imaginar números fuera del rango del juego.
    • Si la partida se prolonga por encima de una cantidad de intentos Dipli será quien gana.

    ¿Cuál será tu versión del juego? Charlalo con tu Facilitador o Facilitadora :)

    Para trabajar en el desarrollo del desafio Dipli, seguí los siguientes paso:
    1. Ingresar al entorno Codesandbox, dentro de la carpeta Dipli crear una carpeta R2.
    2. Dentro de la carpeta Dipli/R2, crear un script desafio_dipli_2.js.

    Desafío - parte I

    Inicia el Juego. Dipli necesita dar la bienvenida al juego, mostrar las reglas, pedir al contrincante que imagine un valor y luego le cuente que había imaginado en 7 ¿Acertaste?. Finalmente salude invitando a volver a jugar.
    Restricciones: Dipli prefiere que usemos diferentes mensajes para comunicarse con el contrincante, En este sentido desea que los mensajes sean más de 3 y menos de 6.

    Desafío - parte II

    Evolucionar el desarrollo anterior para que Dipli imagine un nuevo número en cada ejecución. El juego es igual, solo que el valor que se muestra es generado al azar. Para ello puede utilizar la siguiente sentencia:

    unNumeroAleatorio = Math.floor(Math.random()*(unValorMax-unValorMin+1)+unValorMin);

    donde unValorMax y unValorMin son variables que nos sirven para que los números que se generen se encuentren entre dentro del rango [unValorMin y unValorMax].
    Restricciones: Dipli prefiere que usemos alguna modalidad del juego, por ejemplo «pares polacos», «Andina Patagónica» u otra que se nos ocurra a nosostros.

    Desafío - parte III

    Evolucionar el desarrollo anterior para que el contrincante pueda ingresar su valor y Dipli le muestre por cuanto falló. Tal vez, puede ser un poco más amable y saludar al contrincante por su nombre. Restricciones: Dipli prefiere que mostremos mensajes amigables como "Fallaste por …". "Espero que en la próxima estés mejor". Utilizando tres mensajes diferentes.

    Desafío - parte IV

    Evolucionar el desarrollo anterior para que muestre mensajes como este "Ganó Dipli: False", "Ganó Contrincante: True", "El número que imaginó Dipli es más grande: False". Imagine un nuevo número en cada ejecución.
    Restricciones: Dipli prefiere que informemos esto usando TRUE / FALSE… cosas de Dipli. Además un mensaje diferente para cada caso.

    Separador Visual

    Repaso!

    Recordemos un poco sobre variables

    ¿Cómo podemos representar a las variables en la memoria
    Como bloques o cajas, donde cada una posee con un nombre que la identifica y que dentro contiene el dato o la información

    En JavaScript, al declarar variables ¿Es necesario escribir el tipo de dato que va a almacenar?
    En la mayoría de los lenguajes de programación, es necesario. Pero en JavaScript no

    ¿Cuáles son los tipos datos maneja JavaScript?
    Number, String, Boolean, Null, Undefined, Symbol>

    El operador + si es usado con números, actúa como suma. Pero, ¿Cómo se comporta si es usado con tipo String?
    Actúa uniendo ambos String, también se conoce como concatenar String

    ¿Cómo hace un programa para saber si algo es verdadero o falso?
    Se utilizan datos del tipo Boolean, donde true significa verdadero y false significa falso

    Si la variable haceFrio es boolean. ¿Qué operador debería utilizar para definir otra variable haceCalor, como el opuesto de haceFrio?
    El operador es de negación ! y sería así: haceCalor = !haceFrio

    Separador Visual