Introdução Bem-vindo Como Começar Meu Primeiro Programa     Resolvendo Problemas e Distribuindo Tranformando Dados Programas Interativos     Exercícios de Programação     Fazendo Games
Documentação Declarações     Procedimentos     Variáveis Construtores     Controle de Fluxo Expressões Bibliotecas     Print     IO     Random     Game Engine
Tutoriais Tutoriais Completos     Introdução à Programação     Guia Rápido     Exercícios de Programação     Programando Games

CONTROLE DE FLUXO


Tudo Sobre os Construtores que você usar para
Controlar o Fluxo do seu Programa no Vizzcode





Sobre Controle de Fluxo

Como vimos anteriormente, construtores são os blocos de construção que você usa para criar seu programa.
Existem construtores que te permite controlar o fluxo do seu programa: eles possibilitam que você mude a forma que os comandos são executados no programa (por exemplo, executando eles de forma condicional ou repetida).

Diagrama mostrando o fluxo de execução de um programa-exemplo





Construtor If ‘Se’

Um dos construtores de linguagem mais poderoso é o if ou ‘se’.
Ele te permite criar ramificações na execução baseadas em condições.
A condição pode ser qualquer booleano.

Por exemplo, o código abaixo somente executa o print se a variável condição for verdadeira (true).
#import
"Print"


main
:: () {
    condicao :=
5
<
7
;
    
if
condicao {
        
print
(
"Verdadeiro!"
);
    }
}

Como um if funciona no Vizzcode

Você também pode encadear um else (ou senão) depois do if para executar o código se a condição não for verdadeira:
#import
"Print"


main
:: () {
    condicao :=
5
<
7
;
    
if
condicao {
        
print
(
"Verdadeiro!"
);
    }
else
{
        
print
(
"Falso!"
);
    }
}

Usando Ifs e Else no Vizzcode

Os Ifs podem ser testados de forma sequencial, de tal forma que se a primeira condição não for verdadeira, ela testa a segunda; se a segunda não for verdadeira, ela testa a terceira e assim por diante:
#import
"Print"

#import
"Random"


main
:: () {
    var :=
random_int_in_range
(
0
,
3
);
    
if
var ==
0
  
print
(
"Zero!"
);
    
else
if
var ==
1
  
print
(
"Um!"
);
    
else
if
var ==
2
  
print
(
"Dois!"
);
    
else
if
var ==
3
  
print
(
"Tres!"
);
}

Usando vários Else Ifs juntos no Vizzcode

Assim como qualquer outro escopo, você só precisa incluir os { } nos blocos do if no código de texto, se o bloco tiver mais que um construtor statement.
Da mesma forma, os parêntesis em volta da condição são opcionais.

Por exemplo:
#import
"Print"

#import
"Random"


main
:: () {
    var :=
random_int_in_range
(
0
,
3
);
    
if
var ==
0
  
print
(
"Zero!"
);
    
else
if
var ==
1
  
print
(
"Um!"
);
    
else
if
var ==
2
  
print
(
"Dois!"
);
    
else
if
var ==
3
  
print
(
"Tres!"
);
}

É o mesmo que:
#import
"Print"

#import
"Random"


main
:: () {
    var :=
random_int_in_range
(
0
,
3
);
    
if
(var ==
0
) {
        
print
(
"Zero!"
);
    }
else
if
(var ==
1
) {
        
print
(
"Um!"
);
    }
else
if
(var ==
2
) {
        
print
(
"Dois!"
);
    }
else
if
(var ==
3
) {
        
print
(
"Tres!"
);
    }
}

Existem diversos exemplos de usar o construtor if para criar programas expressivos aqui.




Loops

Loops são ferramentas poderosas na criação de programas.
Eles permitem que parte do código seja repetida múltiplas vezes, até que alguma condição seja falsa ou até mesmo de forma indefinida.

A forma mais comum de fazer um loop pelo código é utilizando o construtor while. Ele testa a condição e depois roda o corpo do código se a condição for verdadeira. Depois ele testa a condição novamente e assim por diante. Com o uso de whiles você pode expressar qualquer tipo de loop no programa.

Para facilitar a criação de loops que rodam um número específico de vezes, existe o loop for. No Vizzcode, o loop for simplesmente itera do valor mínimo até o valor máximo (incluindo esses valores), rodando o corpo do loop toda iteração da variável de iteração.

Também existem os construtores break e continue para ajudar na construção de loops mais expressivos.

Nos Exercícios de Programação, você pode seguir uma guia estruturado de como usar loops nos seus programas de forma prática, começando de exemplos simples até programas mais complexos.

As próximas seções vão mais a fundo nos loops while e for e depois no break e continue.




Loop While ‘Enquanto’

O loop while é um construtor que executa um pedaço de código repetidamente, enquanto uma condição booleana for verdadeira.
Eles são similares aos construtores if em suas condições:
#import
"Print"


main
:: () {
    contador :=
0
;
    
while
contador <=
10
{
        
print_int
(contador);
        
print
(
"\n"
);
        contador +=
1
;
    }
}

Como loops while funcionam no Vizzcode

O programa anterior roda da seguinte forma:
  • Testar a condição (0 <= 10). É verdadeiro, então vai executar o corpo do loop.
  • Testar a condição novamente (1 <= 10). É verdadeiro, então vai executar o corpo do loop.
  • Testar a condição novamente e assim por diante, até que a condição fique falsa e ele saia do loop.

Essa é a saída do loop:
0
1
2
3
4
5
6
7
8
9
10

Podem existir construtores break e continue que influenciam o fluxo do loop.

Você pode aprender como aplicar o loop while em programas reais aqui.




Loop For ‘Para Cada’

Loops for são uma forma sintaticamente mais simples de executar um pedaço de código um número de vezes.

Por exemplo, o seguinte loop while:
main
:: () {
    contador :=
0
;
    
while
(contador <=
10
) {
        
print
(
"Ola!\n"
);
        contador +=
1
;
    }
}

Como criar um loop while no Vizzcode

Pode ser escrito usando um loop for dessa forma:
main
:: () {
    
for
0
..
10
{
        
print
(
"Ola!\n"
);
    }
}

Como loops for (Para Cada) funcionam no Vizzcode

Assim como o exemplo anterior de while possui uma variável contador (que ajuda a iterar pelo loop), o for também declara uma variável.
Ela é chamada, por padrão de it:
main
:: () {
    
for
0
..
10
{
        
print_int
(it);
        
print
(
"\n"
);
    }
}

Programa mostrando o que é a variável de iteração it num loop Para Cada

Você pode mudar facilmente o nome da variável de iteração dessa forma:
main
:: () {
    
for
iterador:
0
..
10
{
        
print_int
(iterador);
        
print
(
"\n"
);
    }
}

Como mudar a variável de iteração it em um loop Para Cada

Note que o loop for sempre vai incrementar o iterador por um, e executar o corpo do loop enquanto o iterador for maior ou igual ao valor máximo, começando do valor mínimo. Esse exemplo de while mostra a mecânica de um loop for que vai de 10 a 20:

#import
"Print"


main
:: () {
    valor_minimo :=
10
;
    valor_maximo :=
20
;
    
    it := valor_minimo;
    
while
(it <= valor_maximo) {
        
print_int
(it);
        
print
(
"\n"
);
        it +=
1
;
    }
}

Fors são especialmente úteis quando tiver iterando por arrays como mostrado em detalhe nesses exercícios.




Break e Continue ‘Sair e Continuar’

Um Construtor Break (Sair) é usado para sair do loop atual.
No exemplo a seguir, o print nunca vai ser executado porque o loop vai parar (break) antes de chegar nele:
#import
"Print"


main
:: () {
    
while
true
{
        
break
;
        
print
(
"Ola"
);
    }
}

Como Contrutores 'Sair do Loop' funcionam no Vizzcode

Ele pode ser combinado com construtores if para sair do loop apenas em algumas condições.
Nesse próximo exemplo, o programa vai imprimir "O que voce gostaria de fazer?" e ler as respostas até o usuário digitar "sair":
#import
"IO"


main
:: () {
    
while
true
{
        entrada :=
scan
(
"O que voce gostaria de fazer? "
);
        
if
entrada ==
"sair"
  
break
;
     }
    
print
(
"OK"
);
}

Combinando um construtor 'Sair' com um If

O Construtor Continue (Continuar) é usado para pular a iteração atual para a próxima iteração.

O código a seguir vai pular a chamada do print quando o iterador for igual a 7 ou 9.
#import
"Print"


main
:: () {
    
for
0
..
10
{
      
if
it ==
7
  
continue
;
      
if
it ==
9
  
continue
;
      
print_int
(it);
      
print
(
"\n"
);
    }
}

Controlando o Fluxo de Execução do programa

Essa é a saída do código anterior:
0
1
2
3
4
5
6
8
10

Os construtores break e continue são ferramentas úteis quando lidando com loops. Você pode ver diversos exemplos de uso com explicação nessa página.