viernes, 29 de julio de 2022

JavaScript 6 - Manejo de errores y creación de un proyecto básico vanilla JavaScript

 


Estructura báscica JavaScript

Para hacer estos ejercicios sencillos, podríamos simplemente crear nuestros scripts deJavaScript, dentro del mismo archivo html del ejercicio, sin embargo esto es SIEMPRE una mala práctica. Debemos acostumbrarnos a hacer las cosas bien aunque , como en este caso se trate de un sencillo ejercicio.

Vamos a crear una estructura básica de proyecto, para ello en nuestro editor de código preferido (en mi caso VScode) crearemos un carpeta con el nombre del ejercicio, en este caso como ya es el ejercicio 4 de nuestro pequeño curso yo la llamaré 04_MANEJO DE ERRORES.

Esta será la carpeta raíz de nuestro proyecto, y dentro de ella vamos a crear dos carpetas más, que llamaremos css y js, como sus nombres indican css guardará nuestros archivos css y en js guardaremos nuestros archivos JavaScript.


figura 1. estructura de proyecto básico 


Crearemos ahora los archivos que necesitamos, dentro de la carpeta js crearemos el archivo errores.js que será nuestro archivo javascript donde crearemos nuestros scripts, luego dentro de la carpeta css vamos a crear un archivo que llamaremos style.css y este será nuestra hoja de estilos, en caso de queramos dar algún estilo. Por último en la propia carpeta raíz, vamos a crear nuestro archivo index.html que será el archivo principal de nuestro pequeño ejercicio y contendrá todo el html que necesitemos.

Escturctura básica html5.

Abriremos nusestro index.html y crearemos una estructura básica html5, si usas VScode versa que solo con escribir html aparece un snippet que te crea directamente una estructura html o html5:


figura 2. Estructura báscica HTML5 


Al hacer enter en html5, se nos crea una estructura básica html5 de forma automatic:

 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   
</body>
</html>

 

Enlazando nuestros archivos CSS y JavaScript

Una vez que tenenmos creada nuestra estructura de  proyecto, debemos enlazar nuestors archivos css y javascript desde nuestro index html  para que todo pueda funcionar:

Enlazando una hoja de estilos externa (archive CSS)

Para ello nuestro VScode también nos prove de un snippet, la zon para escribir el enlace a nuestra hoja de estilos es justo encima del título de nuestro document html , dentro de la sección head, si nos situamos alli y escribimos la plabara link podemos ver como se nos dan varias opciones:

Figura 3. enlazando una hoja de estilo externa al index.html

Al escoger link:css se nos inserta el siguiente enlace:

    <link rel="stylesheet" href="style.css">

 

En el que deberemos modificar la ruta y pasarle la ruta donde tenemos nuestr archive style.css que hemos creado antes, como lo hemos guardado en una carpeta de nombre css nuestra ruta sera:

    <link rel="stylesheet" href="css/style.css">

 

Esta es la manera correcta de vincular un archive externo CSS, si ahora escribimos algún estilo en nuestro archivo y abrimos nuestro index.html veremos como los cambios de estilo se muestran ya en el. Por ejemplo vamos a crear en nuestro index un h1 que diga Curso JavaScript:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/style.css">
    <title>CURSO COMPLETO DE PROGRAMACIÓN EN JAVASCRIPT</title>
</head>
<body>
    <h1>Curso JavaScript</h1>
</body>
</html>

 

Si hacemos clic derecho y abrimos el index en el navegador tendremos:


Figura 4. Navegador sin aplicar estilos CSS


Como ahora tenemos una hoja de estilos vinculada a nuestro index, podemos dar estilos css a éste, por ejemplo, cambiemos el color del h1 a blanco y hagamos que el fondo del document sea de un color oscuro, abriremos nuestro archive css y escribiremos:

html {
    background-color: #303030;
}
 
h1 {
    color: #FFF;
}

 

Si salvamos, veremos el siguiente resultado en nuestro navegador:


Figura 5. Navegador con estilos CSS


Algo similar debemos hacer para vincular nuestro archive js externo y que nuestros scripts tengan efecto en el index. La forma correcta de vincular un archive JavaScript externo es llamarlo al final del document junto enciam de la etiqueta de cierre del body, mediante una etiqueta script a la que le daremos la ruta donde hemos guardado nuestro documento js en la carpeta del proyecto en nuestro caso es js/errors.js:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/style.css">
    <title>CURSO COMPLETO DE PROGRAMACIÓN EN JAVASCRIPT</title>
</head>
<body>
    <h1>Curso JavaScript</h1>
    <script src="js/errores.js"></script>
</body>
</html>


Con esto tenemos todo lo necesario para hacer nuestros ejercicios esta sera la plantilla báscica de nuestros proyectos de ahora en adelante.

Depués de esta pequeña explicación de cómo crear un proyecto básico vanilla js vamos al tema que nos ocupa que es el de manejo de errores.

MANEJO DE ERRORES [ Bloque try…catch…finally ]

Una declaración try…catch señala un bloque de instrucciones a intenetar (try), y especifíca una respuesta si se produce una excepción (catch).

La sentencia try consiste en un bloque try que contiene una o más sentencias. Las llaves {} se deben utilizar siempre, incluso para una bloques de una sola sentencia. Al menos un bloque catch o un bloque finally debe estar presente. Esto nos da tres formas posibles para la sentencia try:

  1. try...catch
  2. try...finally
  3. try...catch...finally

Un bloque catch contiene sentencias que especifican que hacer si una excepción es lanzada en el bloque try. Si cualquier sentencia dentro del bloque try (o en una funcion llamada desde dentro del bloque try) lanza una excepción, el control cambia inmediatamente al bloque catch . Si no se lanza ninguna excepcion en el bloque try, el bloque catch se omite.

La bloque finally se ejecuta despues del bloque try y el/los bloque(s) catch hayan finalizado su ejecución. Éste bloque siempre se ejecuta, independientemente de si una excepción fue lanzada o capturada.

Puede anidar una o más sentencias try. Si una sentencia try interna no tiene una bloque catch, se ejecuta el bloque catch de la sentencia try que la encierra.

Usted también puede usar la declaración try para manejar excepciones de JavaScript. Consulte la Guía de JavaScript para obtener mayor información sobre excepciones de JavaScript.

Vamos a ver esto a través de algunos sencillos ejemplos:

Nos situamos en nuestro archive errores.js y como comentario dejo este ejemplo de estructura de bloque try…catch…finally:

  •          En el bloque try lanzamos un sencillo console.log, se ejecutará y como no hay ningún error en la consola veremos el mensaje del try
  •         En la catch, capturamos cualquier eventual error, y es donde podríamos hacer algo en caso de que hubiera un error.
  •         En el finally , este bloque siempre se ejecuta después de un bloque catch exista o no error, por lo tanto con elsiguiente código deberíamos ver los mensajes del try y del finally, pero no el del catch:

//TRY-CATCH-FINALLY
 
try{
console.log("En el try se agrega el códido a evaluar"); //<--EN CONSOLA VEMOS ESTO
 
}catch(error){
console.log("Catch captura cualquier error lanzado en el try"); //<--ESRTO NO LO VEMOS A NO SER QUE EXITA ALGUN ERROR EN TRY
 
}finally{
console.log("este bloque se ejecuta siempre al final de un try catch");  //<--Y ESTO SIEMPRE  
 
}

Si abrimos nuestro index.html y vaos a la consola podremos ver que es lo que está ocurriendo:

Figura 6 salida por consola del bloque try...catch...finally

Vamos a generar y a lanzar un error, para ver el funcionamiento del bloque catch. Para ello vamos a hacer referencia dentro del try a una variable que no ha sido declarada, que podemos llamar por ejemplo noexiste.

Y en el bloque catch lanzaremos el error por consola con un console.log(error):

//vamos a lanzar un error para ver su funcionamiento
try{
    console.log("En el try se agrega el códido a evaluar"); //<--EN CONSOLA VEMOS ESTO
    noexiste;
    }catch(error){
    console.log("Catch captura cualquier error lanzado en el try"); //<--AHORA SI LO VEO
    console.log(error);  //<--imprimo el error me tira: "ReferenceError: noexiste is not defined at errores.js:18"
    }finally{
    console.log("este bloque se ejecuta siempre al final de un try catch");  //<--Y ESTO SIEMPRE  
   
    }


Ahora veremos nuestro error por consola, si este error no estubiera dentro de un bloque try catch la ejecución del script se detendría y en consola veríamos el típico mensaje en rojo, pero al estar dentro de un try catch, el flujo no se detiene sino que  salta al catch:


Figura 7. Salida por consola de un error bloque catch

Personalizando nuestros propios mensajes de error

Para terminar el ejemplo, vamosa a crear un error personalizado con la function de JavaScript throw new Error

 try{
     //let numero = 10;  //Con un número no lanza mi error y se hace el producto
       let numero = "a"  //como no es un número me lanza mi error personalizado
     if(isNaN(numero)){
       //arrojo mi error personalizado
       throw new Error("El caracter introducido no es un número NaN");
       //de aquí se va al catch-->
     }
     console.log(numero * numero);
     
 }catch(error){
     console.log(`Se produjo el siguiente error: ${error}`)
 
 }


Como puedes ver en el try validamos que la variable número sea un numero mediante la funciín isNaN (is not a number) si lo que tenemos en la variable número no es un número se lanzará nuestro mensaje personalizado, en caso de que sí sea un número se efectuará la multiplicación por él mismo:

Como hemos asígnado una letra a la variable número, en este caso se produce el error y en consola veremos:


Figura 8. Salida por consola de un error personalizado