Bom, eu estou com um problema chato porque estou sem acesso ao meu ambiente Trial do Netweaver, fiz o favor de destruir a Virtual Machine tentando convertê-la para usá-la em um outro software. Mas como ninguém se importa com isso ( 🙁 ), vamos analisar mais um comando, o CHECK!
Síntaxe do comando: CHECK <expressão lógica>, e só. “Mas ué, não tem um ENDCHECK?” Não.. até porque se tivesse seria igual ao IF, mas é exatamente por não tem um ENDCHECK que a coisa começa a complicar…
O CHECK é um comando mutável, isto é, seu funcionamento muda dependendo de onde ele estiver, sem alteração nenhuma em sua síntaxe.
Se você colocar um CHECK dentro de um laço, como este:
REPORT zombie_check_laco.
* Coloquei um DO, mas pode ser um WHILE, um LOOP, SELECT..ENDSELECT,
* qualquer laço da linguagem
DO 10 TIMES.
WRITE / 'Será que o mundo vai acabar?'.
* Com este check, o mundo nunca irá acabar
CHECK 1 = 2.
WRITE 'O MUNDO PORQUE ACABOU 1 é IGUAL A 2'.
ENDDO.
Sempre que um CHECK estiver dentro de um laço e a expressão lógica que você estiver checkando for falsa o programa irá voltar para o início do laço e seguir para o próximo registro(loop/select) ou para o próximo passo do laço (do, while).
No caso acima, a mensagem Será que o mundo vai acabar? seria impressa 10 vezes.
Porém, se você colocar um CHECK fora do laço de repetição, ele vai abortar o processamento do bloco onde o CHECK estiver, seja este bloco um FORM..ENDFORM, uma Função, um Método de uma Classe, ou até mesmo um Report.
Exemplo:
REPORT zombie_check_sem_laco.
* Com este check, o mundo nunca irá acabar
CHECK 1 = 2.
WRITE 'O MUNDO PORQUE ACABOU 1 é IGUAL A 2' .
No caso acima, o programa não vai escrever nada na tela.
E é aí que mora o perigo… Se você estiver no meio de um programa gigantesco e que não esteja muito bem estruturado, colocar um CHECK e o CHECK retornar falso você pode abortar o programa INTEIRO. Portanto, muito cuidado crianças! 😀
Isso cobre os usos mais comuns do CHECK!
Abraços à todos que já destruiram uma execução do Standard colocando um CHECK no meio de uma include perdida dentro de uma EXIT. Vocês não estão sozinhos, acreditem! 😀 😀
Já cansei de ver casos dentro de EXIT's onde temos o nosso código e chega um espertinho e insere um CHECK no início da EXIT que só deveria ser válida para seu processamento, mas que acaba pulando todo o código posterior, no caso o meu que deveria ser processado! Putz!
Uma vez colocaram um check dentro de uma macro no inicia de uma exit maluca, e eu, junior como era na época, não entendia NEM A PAU porque o programa não passava na minha exit 🙁
ahhaha
Acredite atualmente esse é o meu caso, e eu nao sei como fazer o programa continuar, por isso eu cheguei nesse artigo rsrsrsr
Você pode me ajudar nesse exercício ?
Por favor
Faça a divisão de um valor sucessiva por 2 até chegar a 0,01. Coloque um parameter para inserção do
valor na tela. Utilize o DO/ENDDO. O Valor deverá ter a precisão de 4 digitos e 2 casas decimais.
Muito Obrigado pelas partilhas de conhecimento.