Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida na sequência de IF's - Else ou Else IF

É errado ou não é uma boa prática fazer a sequência de IF's da maneira abaixo, sem utilizar ELSE IF?

function leDoTeclado(evento) {

        if(evento.keyCode == esquerda){
            x=x-taxa;
            }
        if (evento.keyCode == cima){
            y=y-taxa;
            }
        if (evento.keyCode==baixo){
            y=y+taxa;
            }
        if(evento.keyCode==direita){
            x=x+taxa;
            }

        tecla=evento.keyCode;
        console.log(tecla)
 }
2 respostas

Não é uma boa prática, por exemplo, se a keyCode esperada não vier com o que vc está procurando, concorda que não teria como você tratar essa situação?

else{
    tecla=evento.keyCode;
    console.log(tecla)
}

fica bem explicito que você fugiu do fluxo esperado

solução!

Boa noite Renan,

Apesar do seu código estar correto ele é pouco eficiente pois os 4 ifs sempre serão testados. A cada click o código testará 4 possibilidades, mesmo se a correta for a primeira. Em um cenário pequeno como o teste acima talvez a diferença de performance seja baixa, mas imagine se esse código for executado 1000 vezes por minuto. Com o elseif poderíamos garantir que menos comparações sejam feitas, e com um switch menos ainda. Dê uma olhada nos exemplos abaixo.

Com o elseIf faremos menos comparações caso as teclas chamadas sejam as primeiras. Ou seja o código fará no máximo 4 comparações, podendo fazer menos algumas vezes.

function leDoTeclado(evento) {

    if(evento.keyCode == esquerda){
        x = x - taxa;
    }
    else if (evento.keyCode == cima){
        y = y - taxa;
    }
    else if (evento.keyCode==baixo){
        y = y + taxa;
    }
    else if(evento.keyCode==direita){
        x = x + taxa;
    }

    tecla=evento.keyCode;

    console.log(tecla)
}

Já com alguma mudanças e um switch podemos garantir que somente uma comparação é feita.

function checkKey(e) {

  var tecla = e.keyCode;

  switch (tecla) {
  case 37:
    alert("Para Esquerda");
    break;
  case 38:
    alert("Para Cima");
    break;
  case 39:
    alert("Para Direita");
    break;
  case 40:
    alert("Para Baixo");
    break;
  default:
    alert("Use uma seta");
}
}

document.onkeydown = checkKey;

Tente sempre analisar o seu código e verificar se ele está executando "código morto" e como você pode evitar isso.

Abraços