// Qué hacer con los parámetros que no existen o que no se pasan function nombreCompleto(nombre, apellido, apellido2 = "") { // Comprobar si un parámetro me lo están pasando o no y actuar en consecuencia if (apellido === undefined) { return "Error no hay apellido"; } return nombre + " " + apellido + " " + apellido2; } console.log(nombreCompleto("Pepe")); // Esto me imprime 'Error no hay apellido' porque no paso apellido console.log(nombreCompleto("Pepe","Pérez")); // Esto me imprime 'Pepe Pérez' console.log(nombreCompleto("Pepe","Pérez","López")); // Esto me imprime 'Pepe Pérez López' console.log(5 == 5); // true console.log(5 == "5"); // true por JS convierte los tipos console.log(5 === "5"); // false porque comprueba valor y tipo console.log(0 == false); // true console.log(0 === false); // false // Poniendo un parámetro por defecto function sumarHasta(limite = 10) { let suma = 0; for (let index = 0; index < limite; index++) { suma += index; } return suma; } console.log(sumarHasta()); function nombreCompletoComoAntes(nombre,apellido,apellido2){ // Antes en vez de parámetros por defecto lo teníamos así nombre=nombre || ""; apellido=apellido || ""; apellido2=apellido2 || ""; return nombre + " " + apellido + " " + apellido2; } console.log(nombreCompletoComoAntes()) console.log(nombreCompletoComoAntes("pepe")) console.log(nombreCompletoComoAntes("pepe","perez")) console.log(nombreCompletoComoAntes("pepe","perez","lopez"))
Ejemplos funciones con doc y casos de prueba
/* Ejemplo 1: Una función que dados dos números, me devuelva el mayor */ // Nombre de la función: mayor // ¿Tengo parámetros? : Dos números // ¿Devuelvo algo? : El número mayor /** * * @param {Number} a * @param {Number} b * @returns El mayor de los dos números */ function mayor(a, b) { if (b < a) { return a; } else { return b; } } // Casos de prueba console.log(mayor(2, 8)); // 8 console.log(mayor(7, 2)); // 7 console.log(mayor(2, 2)); // 2 // Más o menos lo que hacen los test unitarios if (mayor(2, 8) == 8 && mayor(7, 2) == 7 && mayor(2, 2) == 2) { console.log("Todo ok") } // Una función a la que le pasamos un nombre y un apellido y nos devuelve el nombre completo (nombra + apellido) // Nombre: nombreCompleto // Parámetros?: dos cadenas nombre y apellido // Devuelvo algo?: Una cadena /** * * @param {String} nombre * @param {String} apellido * @returns El nombre completo */ function nombreCompleto(nombre, apellido) { return nombre + " " + apellido; } let n=nombreCompleto("Ana","Pi"); console.log(n); // Ana Pi console.log(nombreCompleto("Pepe","Pérez")); // Pepe Pérez // Una función que nos calcule la suma de los números hasta el que le pasemos // Nombre: sumaNumeros // Parámetro: El número límite // Retorno: El total /** * * @param {number} limite * @returns La suma desde 1 hasta límite */ function sumaNumeros(limite){ let suma=0; for(let i=1;i<=limite;i++){ suma+=i; } return suma; } // Casos de prueba console.log(sumaNumeros(50)); // 1275 console.log(sumaNumeros(100)); // 5050
Funciones puras
https://www.geeksforgeeks.org/pure-functions-in-javascript/
/* Vamos a trabajar el concepto de funciones 'puras' */ let nombre="Juan"; function saludo(){ console.log("Hola ",nombre); // Las variables definidas dentro de este bloque son visibles dentro de la función } saludo(); nombre="Ana"; saludo(); // Es mejor que la otra function saludoOk(nombre){ console.log("Hola",nombre); } saludoOk("Pep"); // Todavía mejor function saludoPuro(nombre){ return "Hola "+nombre; } console.log(saludoPuro("Eva")); let s=saludoPuro("Juan"); alert(s);
Ejemplos funciones
/* Las funciones son entre otras muchas cosas una manera de encapsular un código que luego podemos reutilizar en cualquier parte */ let tirada = tiradaMoneda(); console.log(tirada); for (let i = 0; i < 10; i++) { console.log(tiradaMoneda()) } /* Sintaxis de las funciones (clásica) function nombreDeLaFuncion([parámetros opcionales]){ // Código a ejecutar // opcionalmente return valor; } */ // Esta función no tiene parámetros y nos devuelve un valor (1 o 2) function tiradaMoneda() { return Math.trunc(Math.random() * 2) + 1; } // Esta función tiene un parámetro y no devuelve nada function saludo(nombre) { console.log("Hola " + nombre); console.log("Bienvenido a la página de las funciones") } // Esta función tiene un parámetro y nos devuelve un valor function doble(numero) { return numero * 2; } // Para usar una función simplemente ponemos su nombre, paréntesis y los parámetros saludo("Ana"); saludo("Pepe"); saludo("Antonio Federico de todos los santos") // Si la función devuelve algo tendremos que hacer con algo con ese valor. Guardarlo, imprimirlo, compararlo let numero = doble(5); // let numero=10 console.log(numero); console.log(doble(8)); //console.log(16) if (doble(7) > 10) { // if (14>10) console.log("El doble de 7 es mayor de 0"); } // Voy a hacer una función que me diga si un número es primo o no // ¿Necesita algún parámetro? Claro, el número // Devuelve algún valor? Sí, un booleano function esPrimo(numero) { for (let i = 2; i < numero; i++) { if (numero % i == 0) { return false; } } return true; } console.log(esPrimo(80)); console.log(esPrimo(101)); // Dime los números primos entre 2 y 20 for(let i=2;i<=20;i++){ if (esPrimo(i)){ console.log(i); } }
Solución ejercicios for
/*Tenemos una variable 'nombre' con el valor 'Pep' y otra 'cantidad' con el valor 5. Escribid un código que nos muestre por la consola ese nombre la cantidad de veces que valga cantidad. Probad a poner otros valores. */ let nombre="pep"; let cantidad=5; for(let i=0;i<cantidad;i++){ console.log(nombre); } /* Tenemos una variable 'limite' que vale 50. Haced un código que calcule la suma de todos los números hasta ese límite.*/ let limite=50; let suma=0; for(let i=0;i<=limite;i++){ suma+=i; // suma=suma+i } console.log(suma); /* Como informáticos nos viene muy bien conocer las potencias de 2 (2,4,8,16,32,64,128,256,...) Cread un código que nos muestre las potencias de 2 desde 0 hasta 10. (2**i) */ for(let i=0;i<=10;i++){ console.log(2**i); } for(let i=1;i<=2**10;i*=2){ console.log(i); } /*Cread un programa que nos imprima por consola una cuenta atrás desde 5 (5...4...3...2...1...¡Ya!)*/ for(let i=5;i>0;i--){ console.log(i+"...."); } console.log("¡Ya!"); /* Cread un programa que nos cuente los múltiplos de 7 que hay entre 0 y 100*/ let multiplos7=0; for(let i=0;i<=100;i++){ if (i%7==0){ multiplos7++; } } console.log(multiplos7); multiplos7=0; for(let i=0;i<=100;i+=7){ multiplos7++; } console.log(multiplos7); /* Cread un programa que nos haga la media de los números entre 0 y 100 */ suma=0; let contador=0; for(let i=0;i<=100;i++){ suma+=i; // suma=suma+i contador++; } console.log(suma/contador); /* Cread un programa que lance 20 veces una moneda y nos diga al final cuantas caras y cuantas cruces han salido, */ let caras=0,cruces=0; for(let i=0;i<20;i++){ let tiradaMoneda = Math.trunc(Math.random() * 2) + 1; if (tiradaMoneda==1){ caras++; } else{ cruces++; } } console.log("Caras",caras,"Cruces",cruces);
Ejemplos tiradas dados
// Lo siguiente nos devuelve un número entre 1 y 6, como la tirada de un dado // tiradaDado = Math.trunc(Math.random() * 6) + 1; // Vamos a hacer un programa que tire el dado hasta que salga un 5 // for if y break // while o do while tiradaDado=0; for(let i=0;tiradaDado!=5;i++){ tiradaDado = Math.trunc(Math.random() * 6) + 1; console.log("Tirada "+i+" ha salido "+tiradaDado); } console.log("-".repeat(10)); tiradaDado=0; while(tiradaDado!=5){ tiradaDado = Math.trunc(Math.random() * 6) + 1; console.log("Tirada ha salido "+tiradaDado); } console.log("-".repeat(10)); do{ tiradaDado = Math.trunc(Math.random() * 6) + 1; console.log("Tirada ha salido "+tiradaDado); }while(tiradaDado!=5);
Ejemplos funciones matemáticas
let caramelos = 1000; let nens = 70; console.log(caramelos / nens); // Math.round nos redondea según las normas del redondeo: hasta 0.5 para abajo, de 0.5 para arriba let carameloxnen = Math.round(caramelos / nens); console.log(carameloxnen); // Con el random podemos tener valores aleatorios let aleatorio = Math.random(); console.log(aleatorio); // Trunc nos quita los decimales // Por lo tanto si multiplico el random por un valor, le quito los decimales y le sumo 1 // Obtengo un número al azar entre 1 y ese valor // En este caso simulo la tirada de un dado, que es un valor enter 1 y 6 let tiradaDado = Math.trunc(Math.random() * 6) + 1; console.log(tiradaDado); console.log(Math.sqrt(16)); // Obtengo valores entre 1 y 2 let tiradaMoneda = Math.trunc(Math.random() * 2) + 1; console.log(tiradaMoneda) // Lo hago 10 veces, como si tirara una moneda en 10 ocasiones for (let i = 0; i < 10; i++) { tiradaMoneda = Math.trunc(Math.random() * 2) + 1; // Si es 1 es cara y si es 2 es cruz if (tiradaMoneda==1){ console.log("Ha salido cara"); }else{ console.log("Ha salido cruz"); } }
Ejemplos bucle for
for (let i = 0; i < 5; i++) { console.log(i); } let cadena = ""; for (let i = 0; i < 5; i++) { cadena += "*"; } console.log(cadena) let cuadrado = 8; for (let i = 0; i < cuadrado; i++) { let linea = ""; for (let k = 0; k < cuadrado; k++) { linea += "*"; } console.log(linea); } // Tengo en una variable un número y quiero saber sus divisores // 12 -> 2, 3, 4, 6, 12 // 11 -> 11 // 8 -> 2, 4, 8 // ¿Yo puedo de alguna manera en JS saber si un número es divisor de otro? // Si el resto de la división es 0 numero % divisor==0 if (numero % divisor == 0) let numero = 101; for (let i = 2; i <= numero; i++) { if (numero % i == 0) { console.log(i + " es divisor de " + numero); } } // Quiero saber si un número es primo. Un número es primo si solo es divisible entre el mismo y la unidad let esPrimo=true; for (let i = 2; i < numero; i++) { if (numero % i == 0) { console.log(i + " es divisor de " + numero); // Entro aquí cuando 'i' es divisor del número esPrimo=false; } } if(esPrimo){ console.log(`${numero} es primo`) }else{ console.log(`${numero} NO es primo`) } let divisores=0; for (let i = 2; i <= numero; i++) { if (numero % i == 0) { console.log(i + " es divisor de " + numero); divisores++; } } console.log("El número "+numero+" tiene "+divisores+" divisores"); if(divisores==1){ console.log(`${numero} es primo`) } // dibujar un arbolito let cadena=""; let tamanyo=6; for(let i=0;i<tamanyo;i++){ cadena+="*"; console.log(cadena); } // Escribir los números del 1 al 10 y sus cuadrados for(let i=1;i<=10;i++){ console.log(i,i*i); }
Bucle for con ejemplos
// Sintaxis del for es la siguiente: // for( inicializar variables ; condicion ; modificación ) // Forma 'canónica' for (let i = 0; i < 10; i++) { console.log(i); // 0 1 2 ... 9 } for (let i = 1; i <= 10; i++) { console.log(i); // 1 2 3 ... 10 } // Sumar todos los numeros del 1 al 100 let suma = 0; for (let i = 1; i <= 100; i++) { suma += i; } console.log(suma); // Incremento de dos en dos for (let i = 1; i < 1000; i += 2) { console.log(i); } // Restando 1 a la variable for (let i = 10; i > 0; i--) { console.log(i); } // A partir de aquí esto son experimentos. Se muestran para que veáis que se puede hacer // PERO NO PARA HACERLO // for sin inicialización let j = 0; for (; j < 10; j++) { console.log(j) } // for sin modificación for (let i = 0; i < 10;) { console.log(i); i++; } // for sin condicion for (let i = 0; ; i++) { console.log(i); if (i > 10) { break; // Esto sirve para salir del bucle } } // for pelado j = 0; for (; ;) { console.log(j); j++; if (j > 10) { break; } } // combinaciones de todas las cosas for (let i = 0; i < 20; i++) { if (i % 3 == 0) { console.log(i + " es múltiplo de 3"); } } // Bucles anidados for (let i = 0; i < 5; i++) { for (let k = 0; k < 5; k++) { console.log(i, k); } } for (let i = 0; i < 5; i++) { for (let k = 0; k < 5; k++) { if (i < k) { console.log(i, k); } } } // Un ejemplo // Tabla de multiplicar for (let i = 1; i <= 10; i++) { console.log(i + " x 5 = " + (i * 5)); } for (let i = 1; i <= 10; i++) { console.log(`${i} x 5 = ${(i * 5)}`); } // Todas las tablas de multiplicar con un bucle anidado for (let k = 1; k <= 10; k++) { for (let i = 1; i <= 10; i++) { console.log(`${i} x ${k} = ${(i * k)}`); } }
Ámbito (scope) de las variables
//Esto está mal let importe=1000; if(importe>500){ let descuento=.1; console.log(descuento); } console.log(importe*descuento); // Esto está bien let importe=1000; let descuento=0; if(importe>500){ descuento=.1; } console.log(importe*descuento);