JavaScript
Funciones y tipos de datos
Introducción a JavaScript
Es un lenguaje muy utilizado con una sintaxis bastante parecida a Gobstones.
Funciones y como se definen en JavaScript
function doble(numero) {
return 2 * numero;
}
Tener en cuenta que las funciones se pueden usar dentro de otras funciones tal como sería este
caso:
function doble(numero) {
return 2 * numero;
}
function siguienteDelDoble(numero) {
return doble(numero) + 1;
}
Probando funciones
Las funciones se pueden probar con la consola.
Haciendo cuentas
+ —> SUMA
- —> RESTA
* —> MULTIPLICACIÓN
/ —> DIVISIÓN
JavaScript 1
A las funciones hay que prefijarlas con Math. como por ejemplo Math.round , Math.max y
Math.min
Poniendo topes
Math.max —> Sirve para un limite inferior
Math.min —> Sirve para un limite superior
function extraer(saldo, monto) {
return Math.max(saldo - monto, 0);
}
Operadores en JavaScript!!!!
===
valores iguales
>=
mayores o iguales
>
mayores
< menores
<=
menores o iguales
Operadores de equivalencia Operadores de similitud
=== —> igual a == —> parecido a
!== —> distinto a != —> no es parecido a
Booleanos
Se pueden negar con el signo ! : !hayComida
Se puede hacer la conjunción lógica entre dos booleanos mediante el operador && :
hayComida && hayBebida
Se puede hacer la disyunción lógica entre dos booleanos mediante el operador || :
unaExpresion || otraExpresion
Strings
JavaScript 2
Los strings están encerrados entre comillas simples o dobles
Los strings pueden ser usados para compararse entre sí
Se puede determinar la cantidad de caracteres del mismo
longitud("biblioteca")
10
Se pueden concatenar
"aa" + "bb"
"aabb"
Buscar si un string comienza con otro
comienzaCon("una pagina", "una")
Elif is else if
Booleans y su relación con el if
Son lo mismo las dos funciones!
function esMayorDeEdad(edad) {
if (edad >= 18) {
return true;
} else {
return false; function esMayorDeEdad(edad) {
} return edad >= 18;
} }
Tipo de dato Representa Ejemplo Operaciones
1479
Números cantidades + , - , * , % , > , etc
true
Boolean valores de verdad && , ! , etc
JavaScript 3
"hola"
Strings texto longitud ,
comienzaCon , etc
funciones, que siempre retornan algo y no producen ningún efecto
procedimientos, que no retornan nada, y producen efectos
JavaScript no diferencia funciones de procedimientos: todos pueden tener efectos y todos pueden
o no tener retorno.
Es decir que:
si operamos dos números con + , se suman
si operamos dos strings con + , se concatenan
si operamos un string y un número + , se convierte implícitamente el número a string, y
luego se concatenan, al igual que antes
En JavaScript, estas conversiones implícitas, también llamadas coerciones, ocurren mucho.
Las variables nos permiten nombrar y reutilizar valores. Similar a cómo los procedimientos y
funciones nos permiten dar nombres y reutilizar soluciones a problemas más pequeños.
let primerMes = "enero"
Las variables declaradas dentro de una function, conocidas como variables locales, no presentan
mayor misterio. Sin embargo, hay que tener un particular cuidado: sólo se pueden utilizar desde
dentro de la function en cuestión. Si quiero referenciarla desde un programa:
Sin embargo, las variables declaradas directamente en el programa, conocidas como variables
globales, pueden ser utilizadas desde cualquier function.
Actualizaciones como duplicar, triplicar, incrementar en uno o en una cierta cantidad son tan
comunes que JavaScript presenta algunos atajos:
x += y; //equivalente a x = x + y;
x *= y; //equivalente a x = x * y;
x -= y; //equivalente a x = x - y;
x ++ ; //equivalente a x = x + 1;
En la lógica booleana, se puede definir el comportamiento de un operador con una tabla de
verdad donde A y B son las expresiones o valores de verdad a ser operados y el símbolo ^
representa la conjunción. Cada celda tiene una V si representa verdadero o F si representa falso.
JavaScript 4
En el mundo de la lógica estas expresiones se llaman proposiciones. Pero… ¿qué cosas pueden
ser una proposición? Sólo hace falta que porten un valor de verdad, es decir, cualquier expresión
booleana puede ser una proposición.
Ahora cambiemos las funciones tienenLaMismaMadre y tienenElMismoPadre por proposiciones
genéricas A y B. Además, representemos la operación que realiza sonMediosHermanos con el
símbolo ⊻. Lo que obtenemos es... ¡una nueva tabla!
Title A B A⊻B
Untitled @September 24, 2021
Untitled @September 24, 2021
Untitled @September 24, 2021
Untitled @September 24, 2021 @September 24, 2021 @September 24, 2021
Este comportamiento existe como un operador dentro de la lógica y se lo denomina xor o
disyunción lógica excluyente
A diferencia del and, or y not, el xor no suele estar definido en los lenguajes. Sin embargo, ahora
que sabés cómo funciona, si alguna vez lo necesitás podés definirlo a mano
Cuando una expresión matemática tiene varios operadores, sabemos que las multiplicaciones y
divisiones se efectuarán antes que las sumas y las restas:
Al igual que en matemática, cuando usamos operadores lógicos las expresiones se evalúan en un
orden determinado llamado precedencia.
Supongamos que queremos representar al conjunto de nuestras series favoritas. ¿Cómo
podríamos hacerlo?
let seriesFavoritasDeAna = ["Game of Thrones", "Breaking Bad", "House of Cards"];
let seriesFavoritasDeHector = ["En Terapia", "Recordando el Show de Alejandro Molina"]
Como ves, para representar a un conjunto de strings, colocamos todos esos strings que nos
interesan, entre corchetes ( [ y ] ) separados por comas. Fácil, ¿no?
Genial, ¡parece que una lista puede contener cualquier tipo de elemento! Podemos tener listas de
booleanos, de números, de strings, de listas...
Y no sólo eso, sino que además pueden contener cualquier cantidad de elementos: uno, dos,
quince, cientos.
¿Podremos entonces tener listas vacías, es decir, que no tengan elementos? ¡Por supuesto!
JavaScript 5
let unaListaVacia = []
Las listas son muy útiles para contener múltiples elementos. ¡Pero hay más! También podemos
agregarle elementos en cualquier momento, utilizando la función agregar , que recibe dos
parámetros: la lista y el elemento. Por ejemplo:
let pertenencias = ["espada", "escudo", "antorcha"];
//longitud(pertenencias) devuelve 3;
agregar(pertenencias, "amuleto mágico");
//ahora longitud(pertenencias) devuelve 4
Como vemos, agregar suma un elemento a la lista, lo cual hace que su tamaño aumente
FOR
function saludar(personas) {
for(let persona of personas) {
imprimir("hola " + persona);
}
}
Los monumentos que probaste en el ejercicio anterior están representados como registros, y cada
una de sus características (nombre, locación, año de construcción) son campos del registro. Por
cierto, ¡podemos crear registros de cualquier cosa, con los campos que querramos!
let torreEiffel = { nombre: "Torre Eiffel", locacion: "París, Francia", anioDeConstruccion: 1889
};
En un registro vamos a guardar información relacionada a una única cosa (por ejemplo un
monumento o una persona), pero los tipos de los campos pueden cambiar. Por ejemplo, el
nombre y la ubicación de un monumento son strings, pero su año de construcción es un número.
Cuando consultaste los registros existentes, se veía algo parecido a lo siguiente:
tajMahal
{ nombre: "Taj Mahal", locacion: "Agra, India", anioDeConstruccion: 1653 }
Esa consulta era porque estábamos viendo al registro tajMahal completo, incluyendo todos sus
campos. ¡Pero también se puede consultar por un campo particular! Mirá :
tajMahal.locacion
"Agra, India"
La sintaxis para modificar campos de registros es muy similar a lo que hacemos para cambiar los
valores de las variables. Por ejemplo, para cambiar la temperatura de un planeta:
saturno.temperaturaPromedio = - 140;
JavaScript 6
Ahora imaginá que tenemos un registro para representar un archivo, del que sabemos su ruta
(dónde está guardado) y su fecha de creación. Si queremos cambiar su ruta podemos hacer...
leeme
{ ruta: "C:\leeme.txt", creacion: "23/09/2004" }
moverArchivo(leeme, "C:\documentos\leeme.txt")
Unos ejercicios atrás te contamos la diferencia entre listas y registros. ¡Pero eso no significa que
no podamos usar ambas estructuras a la vez!
Por ejemplo, una lista puede ser el campo de un registro. Mirá estos registros de postres, de los
cuales sabemos cuántos minutos de cocción requieren y sus ingredientes:
let flanCasero = { ingredientes: ["huevos", "leche", "azúcar", "vainilla"],
tiempoDeCoccion: 50 }
let cheesecake = { ingredientes: ["queso crema", "frambuesas"], tiempoDeCoccion: 80 }
let lemonPie = { ingredientes: ["jugo de limón", "almidón de maíz", "leche", "huevos"],
tiempoDeCoccion: 65 }
En el ejercicio anterior te mostramos que un registro puede tener una lista entre sus campos. ¿Y
al revés? ¿Podemos tener una lista de registros?
¡Sí! Así como trabajamos con listas de números, booleanos, strings o más listas, también
podemos listar registros. Se puede hacer todo lo que hacías antes, como por ejemplo remover ,
saber su longitud o preguntar por el elemento de cierta posición utilizando los corchetes [] .
Lo que tenemos que hacer, entonces, es repetir la operación de acumular varias veces, una por
cada elemento de la lista. ¡Digamos hola (nuevamente) al for...of !
function gananciaTotal(balancesDeUnPeriodo) {
let sumatoria = 0;
for ( let balance of balancesDeUnPeriodo) {
sumatoria = sumatoria + balance.ganancia;
}
return sumatoria;
}
Como ves, el for...of nos permite visitar y hacer algo con cada elemento de una lista; en este
caso, estaremos visitando cada balance de balancesDeUnPeriodo .
Como podés ver todos los promedios se basan en el mismo principio . Sumar una cantidad
determinada elementos y dividir el resultado por esa cantidad. Si quisiéramos realizar una
función promedio genérica sería algo así:
function promedio(listaDeNumeros) {
return sumatoria(listaDeNumeros) / longitud(listaDeNumeros);
}
function sumatoria(listaDeNumeros) {
JavaScript 7
let sumatoria = 0;
for ( let numero of listaDeNumeros) {
sumatoria = sumatoria + numero;
}
return sumatoria;
}
JavaScript 8