JavaScript/Controle de fluxo

Controlando o que e quando é executado um comando, faz parte de todas as linguagens, e o JavaScript não é diferente.

Existem vários comandos, que por isto são tratados como palavras reservadas e portanto não devem ser utilizados como identificadores de variáveis ou constantes.

Bloco de comandos

editar

No JavaScript, o bloco de comandos é uma estrutura para agrupar outros comandos.

O bloco de comando começa pelo abre chave { e finaliza com o fecha chave }, o ultimo elemento não necessáriamente necessita de finalizar com ponto e virgula ;, mas se terminar não terá problemas, este ultimo ponto e virgula é opcional.

{
    comando;
    comando;
    ...
    comando
}

Ou então:

{
    comando;
    comando;
    ...
    comando;
}

Comando If

editar

Talvez um dos comandos mais utilizados em todas as linguagens de programação, o if é um comando utilizado para tomar a decisão de executar o próximo comando baseado numa expressão lógica, se esta expressão for verdadeira o próximo comando é executado, caso contrário ele é ignorado.

Por exemplo, se for necessário dar um alerta ao usuário, conforme a hora, podemos fazer o seguinte:

var hora = new Date().getHours();
if (hora < 12)
    alert("bom dia");
if (hora >= 12 && hora < 18)
    alert("boa tarde");
if (hora >= 18)
    alert("boa noite");

Note que as três comparações serão feitas, independente da execução, isto é uma perda de tempo, pois se é de dia não pode ser tarde, neste caso anexamos a estrutura do if o comando else que executa o comando a seguir caso o resultado da expressão lógica seja false, ficando o nosso código assim.

var hora = new Date().getHours();
if (hora < 12)
    alert("bom dia");
else if (hora >= 12 && hora < 18)
    alert("boa tarde");
else
    alert("boa noite");

Para tornar mais legível podemos escrever da seguinte forma:

var hora = new Date().getHours();
if (hora < 12) {
    alert("bom dia");
} else {
if (hora >= 12 && hora < 18) {
    alert("boa tarde");
} else {
    alert("boa noite");
}
}

Assim torna mais legível a o comando executado, sem falar que usando blocos de comandos podemos agrupar mais de um comando.

Comando While

editar

Executa bloco enquanto condição resultar em verdadeiro.

while (condição) { bloco; }

Igual ao anterior, porém o bloco é executado pelo menos uma vez, mesmo que a condição seja falsa.

do { bloco; } while (condição);

Comando Switch

editar

Se o conteúdo da variável for igual a constante1 ou constante2 será executado o comando1; se for igual a constante3 será executado o comando2; caso contrário será executado o comando3; note que o comando break força o fluxo sair fora do comando switch.

switch(variável) {
case constante1:
case constante2:
    comando1;
    break;
case constante3:
    comando2;
    break;
default:
    comando3;
}

Comando for

editar

Efetua uma inicialização em seguida executa o comando enquanto a condição for verdadeira, após a execução do comando executa a expressão de incremento, ex:

/*
 * for(inicialização; condição; incremento)
 * comando;
*/
for (var i = 0; i < 3; i++)
    alert(i);
//É equivalente a:
var i = 0;
while (i < 3) {
    alert(i);
    i++;
}

Comando label

editar

O label permite que a indicação de uma posição que pode ser utilizado com continue e break para salto dentro de um loop (laço).

label:

Comando continue

editar

Salta para loop ou para loop que está após label indicado.

continue;
continue label;

Comando break

editar

Sai fora do loop corrente ou do loop que esta após label informado.

break;
break label;

Comando throw

editar

Lança exceção.

throw expressão;

Comando try

editar

Captura qualquer erro que um comando lance e captura exceções conforme expressão.

Abaixo o comando2 será executado caso comando1 lance uma exceção.

try {
    comando1;
} catch(e) {
    comando2;
}

Abaixo o comando3 será executado caso a exceção lançada pelo comando1 seja igual a expressão1, se for igual a expressão2 o comando4 será executado, se for lançado uma exceção que não seja igual nem a expressão1 e nem a expressão2 será executado o comando2;

try {
    comando1;
} catch(e if e == expressão1) {
    comando3;
} catch(e if e == expressão2) {
    comando4;
} catch(e) {
    comando2;
}

Executa comando1 se este lançar uma exceção executa comando2 em seguida comando3, se comando1 não lançar nenhuma exceção executa comando3;

try {
    comando1;
} catch(e) {
    comando2;
} finally {
    comando3;
}

Exemplo:

var x = [["adao"], ["eva"], ["caim"], ["abel"]];

for (i = 0; i < 100; i++) {
    try {
        document.writeln("x[", i, "][0] = ", x[i][0], "<br />");
    } catch (e) {
        document.writeln(e, "<br />");
        break;
    }
}
Observações: No exemplo acima, caso x fosse um vetor (Array de uma dimensão), não haveria erro, mas o loop continuaria, apresentando x[4] = undefined, x[5] = undefined, e assim por diante.