Abstrações: Rótulos e Procedimentos

Rótulos, identificados pelo sinal @ (arroba), definem endereços do plano de voo que podem ser acessados pela instrução executa ou mediante resultado dos testes condicionais seigual, semaior e semenor.

Rótulos

Todo rótulo é nomeado e seguido de dois pontos, indicando o início das instruções acessíveis a partir daquele endereço. Não deve haver dois rótulos com mesmo nome e não se deve utilizar acentos, cedilhas e outros caracteres especiais na nomeação. As posições dos rótulos no plano de voo devem anteceder os pontos em que serão acessados no código.

Por exemplo, @quadrado e @teste são rótulos nomeados adequadamente.

Testes condicionais realizados pelas instruções seigual, semaior e semenor comparam o primeiro argumento fornecido com o número no topo da pilha e desviam o fluxo de execução do plano de voo para o rótulo informado no segundo argumento. Observe o exemplo:

Exemplo
Ver online
Importar

# rótulo
liga
@incrementa:
insere: 1
soma
move
semenor 5:@incrementa
gira: 90
desliga

O rótulo @incrementa identifica o endereço do plano de voo em que se soma o número 1 e se move o foguete. A instrução semenor 5:@incrementa faz com que o computador do foguete "salte" daquela posição para o endereço identificado pelo rótulo. Assim que o valor no topo da pilha for igual a 5, o computador seguirá o fluxo normal, executando as instruções gira: 90 e desliga.

Procedimentos

Há aplicações especiais para os rótulos, denominados procedimentos. Estes são abstrações criadas pelo usuário combinando instruções primitivas da linguagem, com o objetivo de reutilizá-las ao longo do plano de voo.

Todo procedimento é identificado e nomeado como rótulos, porém seu término é identificado pela instrução volta.

Exemplo
Ver online
Importar

# procedimento
@movegira: $angulo
  move
  gira: $angulo 
volta

liga
repete: 3
  # executa desvio
  executa @movegira: 90
fim
desliga

A instrução executa @movegira desviará o fluxo de execução do plano de voo para o endereço identificado pelo rótulo, executará as instruções seguintes até encontrar a instrução volta, de onde retornará para o fluxo normal do plano.

O argumento $angulo de @movegira disponibiliza o valor atribuído àquela variável no escopo do procedimento. O valor 90, atribuído na mesma linha da instrução executa, é armazenado por $angulo e recuperado dentro do procedimento para utilização nos argumentos de instruções como gira, velocidade e repete.

Procedimentos podem reduzir o comprimento do plano de voo e uso de memória do computador do foguete, especialmente quando conseguem resolver trajetos semelhantes e são aplicados várias vezes.

A utilização de um ou mais argumentos aumenta o potencial de abstração dos procedimentos, na medida em que permite a aplicação do mesmo conjunto de instruções em classes de problemas semelhantes.

Sinal
@ (rótulo)
Descrição
Define endereços para os quais o fluxo de execução do plano de voo pode ser desviado. Pode ser utilizado como rótulos para testes condicionais ou procedimentos.
Veja também
Voltar