Translate

Rótulos (Labels) e o comando GOTO

Rótulo e o comando GOTO

Rótulo e o comando GOTO

Autor: Prof. Paulo Kaupa

 

Os rótulos (labels) servem para nomear partes do código. Quando usados em conjunto com a estrutura GOTO é possível modificar o fluxo do código.

Rótulos (Labels)

Para definir um rótulo basta acrescentar uma palavra entre os símbolos <<>>.

Um rótulo deve ser inserido na sessão de execução de códigos, entre as palavras-chave BEGIN e END, o nome dado ao rótulo deve ser único, ou seja, caso existe mais que um rótulo cada um deve receber um nome diferente. Sempre após um rótulo deve haver ao menos um trecho de código.

                Sintaxe :

BEGIN

<< ROTULO>>

<código a ser executado>;      

END;

 

Os labels podem ser aplicados para organizar o código, facilitando futuras leituras e o entendimento.

                Exemplo 1:

BEGIN

<<LOOP_EXTERNO>>

FOR V_EXTERNO IN 1..20 LOOP

DBMS_OUTPUT.PUT_LINE('Valor do Contador Externo: ' || V_EXTERNO);

 

<<LOOP_INTERNO>>

FOR V_INTERNO IN 1..5 LOOP

DBMS_OUTPUT.PUT_LINE('Valor do Contador Interno: ' || V_INTERNO);

                IF V_EXTERNO = 10 THEN

EXIT LOOP_EXTERNO;

END IF;

END LOOP INTERNO;

END LOOP EXTERNO;

END;

 

No exemplo 1, dois laços são códificados de forma encadeada (um dentro do outro), com o uso dos rótulos, podemos identificar exatamente o inicio e fim de cada laço.

 

Comando GOTO

O comando GOTO também deve ser inserido na sessão de execução de códigos, entre as palavras-chave BEGIN e END. Esta estrutura deve indicar um rótulo ao qual irá direcionar a execução do código.

 

Restrições:

O comando GOTO não pode ser usado para direcionar o código para dentro de uma estrutura Condicional como o IF e o CASE nem para dentro as estruturas de laço (Loop) ou para suas sub-rotinas.

Exemplo 2:

                SET SERVEROUTPUT ON;

DECLARE

  v_valor NUMBER(38):=1;

   

BEGIN

   

IF v_valor = 10 THEN

      DBMS_OUTPUT.PUT_LINE('DEZ');

      GOTO FIM;

ELSE

      DBMS_OUTPUT.PUT_LINE(v_ valor);

END IF         

 

 <<FIM>>

 DBMS_OUTPUT.PUT_LINE('Fim do programa');

 

END;

 

No Exemplo 2, foi criado um rótulo nomeado FIM. Se o valor passado para a variável  v_valor for igual a 10 o fluxo do código será direcionado com o uso do comando GOTO para o rótulo  <<FIM>>.

Exemplo 3:

                SET SERVEROUTPUT ON;

DECLARE

 

 v_contador NUMBER (38):=1;

   

BEGIN

   

 FOR v_contador  IN 1..20 LOOP   

 IF v_contador = 10 THEN

 DBMS_OUTPUT.PUT_LINE('DEZ');

      GOTO FIM;

ELSE

      DBMS_OUTPUT.PUT_LINE(v_contador);

END IF         

 END LOOP;

 

  <<FIM>>

 DBMS_OUTPUT.PUT_LINE('Fim do programa');

 

END;

 

No Exemplo 3, o fluxo do código será direcionado para o rótulo  <<FIM>> quando o valor do contador for igual a 10.

 

Nota: Para um melhor entendimento do Bloco de Código do Exemplo 1, consulte o material Estruturas de Decisção e Estruturas de Repetição (Laços).

Exemplo 4:

SET SERVEROUTPUT ON;

 

DECLARE

 v_contador NUMBER(2) := 10;

BEGIN

   <<INICIO_LOOP>>

 

   WHILE v_contado <= 20 LOOP

DBMS_OUTPUT.PUT_LINE ('Contador igual a: ' || v_contado);

      v_contado := v_contado + 1;

      IF v_contado = 14 THEN

         v_contado := v_contado + 1;

         GOTO INICIO_LOOP;

      END IF;

   END LOOP;

END;

 

No Exemplo 4, o fluxo do código será direcionado para o rótulo  <<INICIO_LOOP >> quando o valor do contador for igual a 14.

 

Exemplo 5:

SET SERVEROUTPUT ON;

 

DECLARE

                v_contador NUMBER(2) := 10;

BEGIN

 

   <<INICIO_LOOP>> 

   WHILE v_contador <= 20 LOOP

DBMS_OUTPUT.PUT_LINE ('Contador igual a: ' || v_contador);

                 v_contador := v_contador + 1;

 

                 IF v_contador = 11 OR v_contador  = 17 THEN

                                v_contador := v_contador + 1;

                                 GOTO INICIO_LOOP;

                 ELSIF v_contador = 19 THEN

                                GOTO FIM_CODIGO;

                END IF;

   END LOOP;

  

   <<FIM_CODIGO>>

   DBMS_OUTPUT.PUT_LINE ('FIM');

  

END;

 

No Exemplo 5, o fluxo do código será direcionado para o rótulo  <<INICIO_LOOP >> quando o valor do contador for igual a 11 ou igual a 17. Quando o valor for igual a 19 o código será direcionado para o final.

 

Atividade 1 -  (Rótulos e Estrutura GOTO)

1 – Elabore um Bloco de Códigos que direcione o código para um rótulo <<PAR>> caso o valor informado seja par e imprima na tela a seguinte mensagem: “O Valor informado é par.”  Se o valor informado for impar redirecione seu código para um rótulo <<IMPAR>> e informe através de uma mensagem que o valor in formado é impar.

2 - O código deve avaliar apenas os números que estiverem entre 1 e 50.

3 – Crie ao final de seu bloco de código um rótulo com nome QUARENTA. Quando seu código alcançar o valor 40 redirecione o fluxo para este rótulo

Sobre o Autor:

Mestre em Engenharia de Produção pela Universidade Nove de Julho. Bacharel em Ciência da Computação também pela Universidade Nove de Julho. Atualmente é Professor de ensino superior (Universidade Nove de Julho), Analista de Sistemas na Empresa Atento e Pesquisador na área de Inteligência Computacional aplicada em investimentos na Bolsa de Valores de São Paulo. Possui experiência em Análise e desenvolvimento de sistemas, aplicações de Inteligência Computacional no Mercado de Ações, Análise Técnica para seleção de ações para investimentos na Bolsa de Valores. Curriculo Lattes: http://lattes.cnpq.br/0074185478343196