    Curso de scripvox - aula8 (Por Fabiano Ferreira)

    Desvios de execução

    Desde o início do curso, dizemos que os scripts são executados linha
por linha, da primeira para a última.
    Isso é verdade. Porém, há um 'algo a mais' que guardamos para ser
revelado em ocasião mais apropriada.
E aí está! o dia da revelação do mistério chegou!
    Um mistério que se chama desvio de execução.
    Vamos vê-lo na prática.

    *Marcando um ponto de desvio;

    Antes de fazer um desvio, é preciso que seja estabelecido um ou mais
pontos de desvio no código fonte.
Simplificando: precisamos marcar pontos no código, para indicar que
aquele local é um local ao qual o programa pode voltar depois, caso eu
precise.
    Para marcar o ponto de desvio, usamos um rótulo.
    O rótulo pode ser qualquer nome de nossa escolha, precedido pelo
sinal de @ "arroba"
    Vejamos então um exemplo de um código com um rótulo marcando um
ponto para desvio:

Escreve "Isso é um exemplo"
Escreve "para demonstrar desvios de execussão."

@finaliza
Escreve "Fim do programa."
Termina.

    No código acima, o @finaliza, é um rótulo.
    Isso quer dizer que, se desejarmos, podemos fazer com que o programa
volte, ou avance, durante a execussão para o ponto onde está o rótulo finaliza e
execute da lí em diante.

*Desviando para um ponto marcado no código;
    Para desviar para um ponto marcado, usamos o comando desvia, um
espaço e o nome do rótulo desejado, incluindo o arroba.
    Vejamos agora um exemplo completo de desvio de execussão:

Escreve "Aqui começou meu código."
Desvia @final
Escreve "Essa é a próxima linha do meu código."

@final
Escreve "Foi um prazer conversar contigo."
Escreve "Tchau."
Termina mudo


    A execussão do código acima seria assim:
    Executa a linha 1;
Pula para a linha 6, pois na linha 2 há um desvio para o  rótulo chamado
de final;
    EXecuta o restante do programa até o fim;

    Vejamos um outro exemplo:

    Escreve "Informe seu nome"
Lê n
Escreve "Muito prazer, "n". Vamos conversar?"
@opcao
Escreve "Tecle s ou n"
le r &
Se r = "s" desvia @satisfeito
se r = "n" termina mudo
Escreve "opção inválida."
desvia @opcao
@satisfeito
Escreve "Que bom, "f" que aceitou meu convite."
Escreve "Mas era apenas para dar um exemplo de desvio de execução pra galera do curso."
Escreve "Até a próxima!"
Escreve "Tchau."
Termina mudo

    Vamos analisar o código acima:
    Primeiro é executado a linha 1, que exibe uma mensagem pedindo o
nome do usuário.
Na segunda, temos o comando lê, que guarda na variável n o nome
digitado.
Na linha 3, temos a exibição de outra string pedindo uma resposta "vamos
conversar?"
    Na quarta linha, temos uma marcação de um ponto de desvio com o
rótulo @opcao.
    Na quinta linha, temos a exibição de uma string pedindo que o
usuário tecle s ou n.
Na sexta linha, temos o comando lê que guarda a resposta digitada na
variável 'r'.
Na sétima linha, temos uma execussão condicional, que diz que se o
usuário teclar 's', o programa deve desviar a execussão para um rótulo
chamado @satisfeito.
    A oitava linha diz que, se o usuário teclou n, o programa deve
fechar.
Se nenhuma das duas condissões forem satisfeitas, o programa segue em
frente, executando a linha 9.
No nosso caso, é uma string dizendo que a opção teclada pelo usuário é
inválida.
E na décima linha, um desvio para o rótulo @opcao.
    Isso quer dizer o seguinte: qualquer tecla que não for s ou n o
programa não aceita e vai pedir que você tecla novamente a opção.
    Aqui vemos mais um exemplo de loop, e descobrimos que, em
programação, não há apenas uma única forma de se resolver um determinado
problema.
    O trecho em questão podia ser escrito usando o bloco enquanto.

    As linhas que vêm após a décima linha, seria a parte do programa que
seria executada, se a resposta do usuário fosse 's', pois, é a parte do
código que foi marcada com o rótulo @satisfeito.

    Assim termina nossa aula8.

    Exercícios:
1 - O que você entende por desvio de execussão?

2 - Por que é recomendado cautela ao usar o comando desvia?

3 - Faça um programa com as seguintes características:
*permita que o usuário digite dois números;
*Realize a soma dos dois valores e exiba o resultado;
*execute esses passos, até que o usuário digite o valor 0 para a primeira parcela da soma;
*use o comando desvia, para controlar a forma de execussão do programa;

*Entregar as respostas até o dia 18/09, enviando email para o seguinte
endereço:
qst-scripvox@sanfersite.com.br

    Boa sorte!
