es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Complejidad entre if-else, switch y regex

Voy a optimizar el código javascript en el que he visto que el código antiguo es como el siguiente:

var emcont = $('#emcont').val();
numericMatch = emcont.match(/\d/g);
if (numericMatch == null) {
    isValid = false;
    $('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (emcont.length != 14) {
    isValid = false;
    $('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (numericMatch.length && numericMatch.length != 10) {
    isValid = false;
    $('#msg_emcont').html(getMessage('msg_emcont')).show();
} else {
    $('#msg_emcont').html('').hide();
}

Voy a convertir las condiciones if-else en condiciones switch, pero el problema en el código anterior es que la validación de la segunda condición utiliza la variable emcont, por lo que no puedo usar directamente la variable numericMatch en la declaración switch. Por lo tanto, he decidido usar la variable emcont directamente en la declaración switch como el siguiente código:

switch(emcont)
    {
        case emcont.match(/\d/g) == null:
            isValid = false;
            $('#msg_emcont').html(getMessage('msg_emcont')).show();
            break;
        case emcont.length != 14:
            isValid = false;
            $('#msg_emcont').html(getMessage('msg_emcont')).show();
            break;
         case emcont.match(/\d/g).length && emcont.match(/\d/g).length != 10:
            isValid = false;
            $('#msg_emcont').html(getMessage('msg_emcont')).show();
            break;
        default:
            $('#msg_emcont').html('').hide();
            break;
    }

En el código anterior, he utilizado expresiones regulares en la validación de los casos switch, por lo que necesito saber cuál de los dos códigos es mejor en términos de rendimiento.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código original que utiliza condiciones if-else es probablemente más eficiente que el código que utiliza condiciones switch. Esto se debe a que las condiciones switch comparan un valor con varios casos utilizando igualdad estricta (===) y ejecutan el bloque de código asociado al primer caso coincidente, lo cual puede ser más lento que las simples condiciones if-else.

    Además, el código que utiliza condiciones switch en este caso específico parece incorrecto. La instrucción switch solo puede comparar un único valor con diferentes casos, pero los casos en el código están utilizando expresiones booleanas en lugar de valores. Esto no funcionará como se pretende y puede provocar un comportamiento inesperado.

    Por lo tanto, se recomienda utilizar el código original if-else y posiblemente optimizarlo aún más evitando asignaciones de variables innecesarias y llamadas a funciones.

Comments are closed.