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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]Salta para loop ou para loop que está após label indicado.
continue;
continue label;
Comando break
[editar | editar código-fonte]Sai fora do loop corrente ou do loop que esta após label informado.
break;
break label;
Comando throw
[editar | editar código-fonte]Lança exceção.
throw expressão;
Comando try
[editar | editar código-fonte]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;
}
}
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.