Lección 1.13: Depurar
Un programa casi nunca funciona a la primera. Depurar es encontrar por qué, y tiene método.
La idea
Hay dos tipos de fallo:
- Con error: el programa se para y la consola dice por qué, en rojo.
- Sin error: el programa termina, pero el resultado está mal.
Para el primero, se lee el error. Para el segundo, se mira por dentro con console.log().
Leer un error
console.log(puntos);
Uncaught ReferenceError: puntos is not defined
at <anonymous>:1:13
Tiene tres partes:
- El tipo:
ReferenceError. - El mensaje:
puntos is not defined, «puntos no está definido». - Dónde:
1:13, línea 1, carácter 13.
Los mensajes vienen en inglés aunque el navegador esté en español.
Los tres más comunes
| Error | Qué dice | Causa típica |
|---|---|---|
SyntaxError | El código está mal escrito | Falta un paréntesis, una llave o unas comillas |
ReferenceError | Ese nombre no existe | Una errata: nombre y Nombre son distintos |
TypeError | Ese valor no admite eso | Usar algo que vale undefined |
Sin error, pero mal
Esta media debería dar 6.5:
const notas = [7, 4, 9, 6];
let suma = 0;
for (const nota of notas) {
suma = nota;
}
console.log(suma / notas.length);
1.5
Un console.log() dentro del bucle enseña qué pasa en cada vuelta. Separa los valores con comas:
for (const nota of notas) {
suma = nota;
console.log("nota:", nota, "suma:", suma);
}
nota: 7 suma: 7
nota: 4 suma: 4
nota: 9 suma: 9
nota: 6 suma: 6
suma no acumula: cada vuelta la sustituye. Tiene que ser suma = suma + nota.
El método
- Lee el primer error, no el último.
- Ve a la línea que indica.
- Si no hay error, pon
console.log()para ver los valores. - Cambia una sola cosa y vuelve a probar.
Pruébalo
Este programa tiene dos fallos. Pégalo en la consola y arréglalo error a error.
function saludar(nombre) {
console.log("Hola, " + nombre;
}
Saludar("Ana");
Ver la solución
SyntaxError: falta cerrar el paréntesis deconsole.log(. Quedaconsole.log("Hola, " + nombre);.- Al arreglarlo aparece el segundo, un
ReferenceError: la función se llamasaludary se usa comoSaludar. Mayúsculas y minúsculas cuentan.
function saludar(nombre) {
console.log("Hola, " + nombre);
}
saludar("Ana");
El segundo fallo no se veía hasta arreglar el primero. Es normal: por eso se va de uno en uno.
En resumen
- Un error dice qué pasó (tipo y mensaje) y dónde (línea).
- Sin error,
console.log()enseña los valores por dentro. - De uno en uno: el primer error, una sola corrección y probar otra vez.