Lekcje modułu (2/2)
Decyzje z IF i EVALUATE
Podejmowanie decyzji w COBOL-u odbywa się głównie za pomocą instrukcji warunkowej IF oraz struktury wielokrotnego wyboru EVALUATE (odpowiednik switch lub match w nowoczesnych językach).
Instrukcja warunkowa IF
Podstawowa składnia instrukcji IF to:
IF warunek
instrukcje-jeśli-prawda
ELSE
instrukcje-jeśli-fałsz
END-IF.
W nowoczesnych wersjach COBOL-a (COBOL-85 i nowsze) instrukcja musi kończyć się jawnie słowem kluczowym END-IF. zamiast polegać wyłącznie na kropce ., co znacznie zmniejsza błędy parsowania i błędy logiczne.
Typowe warunki
- Większy niż:
>lubGREATER THAN - Mniejszy niż:
<lubLESS THAN - Równy:
=lubEQUAL TO - Większy lub równy:
>=lubGREATER THAN OR EQUAL TO - Mniejszy lub równy:
<=lubLESS THAN OR EQUAL TO
IF WS-BALANCE < 0
DISPLAY "CONTO IN ROSSO"
ELSE
DISPLAY "CONTO ATTIVO"
END-IF.
Instrukcja EVALUATE
Gdy musimy porównać zmienną z wieloma osobnymi wartościami, użycie wielu zagnieżdżonych instrukcji IF może stać się skomplikowane. Instrukcja EVALUATE rozwiązuje ten problem, organizując opcje wyboru w uporządkowany sposób:
EVALUATE WS-USER-ROLE
WHEN "ADMIN"
DISPLAY "ACCESSO COMPLETO"
WHEN "EDITOR"
DISPLAY "ACCESSO EDIT"
WHEN OTHER
DISPLAY "ACCESSO LIMITATO"
END-EVALUATE.
WHEN OTHER: Określa gałąź domyślną (odpowiednikdefaultlub końcowegoelse).END-EVALUATE.: Kończy strukturę.
Spróbuj sam
Napisz blok IF-ELSE-END-IF sprawdzający, czy zmienna WS-USER-AGE jest większa bądź równa 18. W przypadku pozytywnym wypisz 'ADULT', w przeciwnym wypadku wypisz 'MINOR' za pomocą DISPLAY.
Pokaż wskazówkę
Użyj >= do porównania, DISPLAY do wypisania wyniku, a na końcu END-IF. (z kropką na końcu bloku).
Rozwiązanie dostępne po 3 próbach
Uzupełnij strukturę EVALUATE, aby sprawdzić zmienną WS-STATUS. Jeśli wartość to 'A', wypisz 'ACTIVE', jeśli 'I' - 'INACTIVE', w przeciwnym razie dla jakiejkolwiek innej wartości wypisz 'UNKNOWN'.
Pokaż wskazówkę
Napisz poszczególne gałęzie WHEN, po których następuje odpowiedni DISPLAY, i użyj WHEN OTHER do obsługi przypadku domyślnego.
Rozwiązanie dostępne po 3 próbach