Anuncios

Bienvenidos sean a este post, hoy veremos otra opcion de configuracion.

Anuncios

Esta opcion se utiliza para atrapar errores logicos dentro de un switch. Antes de pasar al ejemplo debemos realizar varias cosas. La primera es generar el archivo tsconfig.json, para ello deben usar el comando tsc –init, una vez generado ingresan al archivo y busquen la opcion strict para pasarla de true a false. Lo siguiente sera descomentar la siguiente linea:

"noFallthroughCasesInSwitch": true,
Anuncios

Con todo esto realizado pasemos a analizar el siguiente ejemplo:

function elegir(v: number): string {
        let retorno: string = "";
        switch (v) {
                case 1:
                        retorno = "Primera opcion";
                case 2:
                        retorno = "Segunda opcion";
                        break;
                default:
                        retorno = "Opcion predeterminada";
        }
        return retorno;
}

console.log("Caso 1: " + elegir(1));
console.log("Caso 2: " + elegir(2));
console.log("Caso 3: " + elegir(3));
Anuncios
Anuncios

Primero tenemos una funcion que recibe un valor numerico pero devuelve uno de tipo string. Dentro de este lo primero que haremos sera declarar una variable vacia que usaremos para devolver el resultado final. Luego tenemos un switch donde verifica el valor recibido. Los case evaluan si reciben dos tipos de valores distintos y en ambos casos devolvemos un mensaje, cada uno estara relacionado al valor del case. Y al final del switch tenemos un default que sera el encargado de manejar cualquier valor por fuera de los dos anteriores. Lo ultimo en la funcion es la devolucion del valor establecido en la variable retorno. Por ultimo mostraremos la salida obtenida por el llamado a la funcion anterior con distintos valores. Compilemos y veamos la salida:

$ tsc
ejemploTS.ts:4:3 - error TS7029: Fallthrough case in switch.

4   case 1:
    ~~~~~~~


Found 1 error in ejemploTS.ts:4

$
Anuncios

Si bien el codigo anterior es valido tiene un error de logica. Bajo ciertas circunstancias los case no deben cerrar siempre con un break porque en algunas circunstancias podemos tener la situacion de que las instrucciones del case 1 sean las mismas que en el case 2 por lo tanto no es necesario repetirlas y podemos usar lo siguiente:

        switch (v) {
                case 1:
                case 2:
                        retorno = "Segunda opcion";
                        break;
                default:
                        retorno = "Opcion predeterminada";
        }
Anuncios

Por lo tanto tanto si recibe un 1 o un 2 hara la misma accion pero en nuestro caso no es asi porque necesitamos diferenciarlos por lo tanto es necesario el break sino el valor para el caso 1 sera el mismo que el caso 2. La salida sera como esta:

Caso 1: Segunda opcion
Caso 2: Segunda opcion
Caso 3: Opcion predeterminada
Anuncios

Lo cual no es correcto por lo tanto el compilador entiende que ocurrio un error pero vean que funciono correctamente con el caso de default. Por lo tanto debemos modificar el codigo anterior de la siguiente manera:

function elegir(v: number): string {
        let retorno: string = "";
        switch (v) {
                case 1:
                        retorno = "Primera opcion";
                        break;
                case 2:
                        retorno = "Segunda opcion";
                        break;
                default:
                        retorno = "Opcion predeterminada";
        }
        return retorno;
}

console.log("Caso 1: " + elegir(1));
console.log("Caso 2: " + elegir(2));
console.log("Caso 3: " + elegir(3));
Anuncios

Simplemente agregamos el break al primer case. Si lo compilan no nos devolvera ningun error y si lo ejecutan obtendran la siguiente salida:

$ node dist/ejemploTS.js
Caso 1: Primera opcion
Caso 2: Segunda opcion
Caso 3: Opcion predeterminada
$
Anuncios

Como pueden ver esta opcion esta pensada principalmente para evitar estos errores logicos dado que bajo ciertas circunstancias pueden derivar en un error de ejecucion. Porque en lugar de devolver un mensaje deba devolver un valor para procesarlo y esto a su vez puede derivar en un error de operacion y de ejecucion por no cumplir la condicion.

Anuncios

En resumen, hoy hemos visto noFallthroughCasesInSwitch, que es, para que sirve, como se habilita, un ejemplo para ver porque se genera asi como solucionarlo de una forma simple. Espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50