4.4 - Controle de Fluxo
O controle de fluxo em PL/I ou em qualquer outra linguagem é essencial para direcionar a execução do programa conforme condições e repetições, oferecendo clareza e robustez. Nesta seção, abordaremos três pilares fundamentais: estruturas condicionais, laços de repetição e tratamento de exceções.
F-THEN-ELSE e blocos DO
A instrução IF-THEN-ELSE avalia uma expressão lógica e executa o bloco correspondente à condição verdadeira ou falsa. Quando há múltiplas instruções, utiliza-se DO ... END para delimitar o bloco.
IF saldo < 0 THEN
DO;
PUT SKIP LIST('Conta estourada!');
saldo = 0;
END;
ELSE
PUT SKIP LIST('Saldo OK:', saldo);IF condição THENinicia o teste lógico.DO ... ENDagrupa várias instruções dentro de um mesmo ramo.ELSE(opcional) define o fluxo quando a condição é falsa.
Para repetições, PL/I oferece três variações do comando DO:
a) DO variável = início TO fim [BY passo]
Executa o bloco para cada valor da variável.
DO i = 1 TO 10 BY 2;
PUT SKIP LIST('Iteração:', i);
END;b) DO WHILE (condição)
Repete enquanto a condição for verdadeira.
c) DO UNTIL (condição)
Repete até que a condição se torne verdadeira (executa ao menos uma vez).
4.5.2 SELECT-WHEN-OTHERWISE
Para testar um valor contra múltiplos casos, utiliza-se SELECT-WHEN-OTHERWISE, equivalente a uma estrutura de escolha múltipla:
SELECT (expressão)define o valor a comparar.Cada
WHEN (valor)verifica igualdade — é possível agrupar vários valores.OTHERWISEtrata os casos não previstos.END;encerra o bloco.
4.5.3 ON-units (Tratamento de Exceções)
PL/I inclui um mecanismo robusto para interceptar condições excepcionais: as ON-units. Elas permitem reagir a erros durante a execução.
ON ZERODIVIDEcaptura tentativas de divisão por zero.ON ENDFILE(dataset)detecta fim de arquivo em operações de I/O.O bloco
BEGIN ... ENDespecifica ações corretivas ou informativas.Após o tratamento, a execução prossegue na instrução seguinte ao ponto que gerou a condição.
Com esses recursos — IF-THEN-ELSE, DO, SELECT-WHEN-OTHERWISE e ON-units — você tem controle total sobre o fluxo do programa, podendo responder a condições, iterar sobre dados e lidar elegantemente com erros em tempo de execução.
Na próxima seção, exploraremos recursos avançados para manipulação de strings e funções intrínsecas.
Last updated