Bedingte Verarbeitung — das IF-Statement

Mit dem IF-Statement können Sie eine logische Bedingung definieren und Statements angeben, die in Abhängigkeit von dieser logischen Bedingung verarbeitet werden sollen.

Dieses Dokument behandelt folgende Themen:


Struktur des IF-Statements

Das IF-Statement hat drei Bestandteile: IF, THEN und ELSE.

IF Mit der IF-Klausel geben Sie eine logische Bedingung an, die erfüllt werden soll.
THEN Mit der THEN-Klausel geben Sie die Statements an, die ausgeführt werden sollen, wenn diese Bedingung erfüllt wird.
ELSE Mit der (wahlweise verwendbaren) ELSE-Klausel haben Sie zusätzlich die Möglichkeit, Statements anzugeben, die ausgeführt werden sollen, wenn die Bedingung nicht erfüllt wird.

Ein IF-Statement hat also folgende allgemeine Form:

IF condition  
   THEN execute statement(s)  
   ELSE execute other statement(s)  
END-IF

Anmerkung:
Falls Sie wünschen, dass eine bestimmte Verarbeitung nur ausgeführt werden soll, wenn eine IF-Bedingung nicht erfüllt wird, können Sie die Klausel THEN IGNORE verwenden, d.h. das IGNORE-Statement bewirkt, dass die IF-Bedingung ignoriert wird, wenn sie erfüllt wird.

Beispiel 1:

** Example 'IFX01': IF
************************************************************************
DEFINE DATA LOCAL
1 MYVIEW VIEW OF EMPLOYEES
  2 NAME
  2 BIRTH
  2 CITY
  2 SALARY (1:1)
END-DEFINE
*
LIMIT 7
READ MYVIEW BY CITY STARTING FROM 'C'
 IF SALARY (1) LT 40000 THEN
    WRITE NOTITLE '*****' NAME 30X 'SALARY LT 40000'
  ELSE
    DISPLAY NAME BIRTH (EM=YYYY-MM-DD) SALARY (1)
  END-IF
END-READ
END

Der IF-Statement-Block im obigen Programm bewirkt folgende bedingte Verarbeitung:

  • Wenn (IF) das Gehalt weniger als 40000 beträgt, dann (THEN) soll das WRITE-Statement ausgeführt werden;

  • andernfalls (ELSE), d.h. wenn das Gehalt 40000 und mehr beträgt, soll das DISPLAY-Statement ausgeführt werden.

Ausgabe des Programms IFX01:

        NAME            DATE      ANNUAL
                         OF       SALARY
                       BIRTH
-------------------- ---------- ----------
 
***** KEEN                                              SALARY LT 40000
***** FORRESTER                                         SALARY LT 40000
***** JONES                                             SALARY LT 40000
***** MELKANOFF                                         SALARY LT 40000
DAVENPORT            1948-12-25      42000
GEORGES              1949-10-26     182800
***** FULLERTON                                         SALARY LT 40000

Beispiel 2:

** Example 'IFX03': IF
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 NAME
  2 CITY
  2 BONUS  (1,1)
  2 SALARY (1)
*
1 #INCOME  (N9)
1 #TEXT    (A26)
END-DEFINE
*
WRITE TITLE '-- DISTRIBUTION OF CATALOGS I AND II --' /
*
READ (3) EMPLOY-VIEW BY CITY = 'SAN FRANSISCO'
  COMPUTE #INCOME = BONUS(1,1) + SALARY(1)
  /*
 IF #INCOME > 40000
    MOVE 'CATALOGS I AND II' TO #TEXT
  ELSE
    MOVE 'CATALOG I'         TO #TEXT
  END-IF
  /*
  DISPLAY NAME 5X 'SALARY' SALARY(1) / BONUS(1,1)
  WRITE T*SALARY '-'(10) /
        16X 'INCOME:' T*SALARY #INCOME 3X #TEXT /
        16X '='(19)
  SKIP 1
END-READ
END

Ausgabe des Programms IFX03:

                    -- DISTRIBUTION OF CATALOGS I AND II --
 
        NAME               SALARY
                           BONUS
--------------------     ----------
 
COLVILLE JR                   56000
                                  0
                         ----------
                INCOME:       56000   CATALOGS I AND II
                ===================
 
RICHMOND                       9150
                                  0
                         ----------
                INCOME:        9150   CATALOG I
                ===================
 
MONKTON                       13500
                                600
                         ----------
                INCOME:       14100   CATALOG I
                ===================

Geschachtelte IF-Statements

Es ist möglich, mehrere IF-Statements ineinander zu verschachteln, zum Beispiel, indem Sie die Ausführung einer THEN-Klausel durch ein weiteres, in der THEN-Klausel angegebenes IF-Statement von einer zusätzlichen Bedingung abhängig machen.

Beispiel:

** Example 'IFX02': IF (two IF statements nested)
************************************************************************
DEFINE DATA LOCAL
1 MYVIEW VIEW OF EMPLOYEES
  2 NAME
  2 CITY
  2 SALARY (1:1)
  2 BIRTH
  2 PERSONNEL-ID
1 MYVIEW2 VIEW OF VEHICLES
  2 PERSONNEL-ID
  2 MAKE
*
1 #BIRTH   (D)
END-DEFINE
*
MOVE EDITED '19450101' TO #BIRTH (EM=YYYYMMDD)
*
LIMIT 20
FND1. FIND MYVIEW WITH CITY = 'BOSTON'
                  SORTED BY NAME
 IF SALARY (1) LESS THAN 20000
    WRITE NOTITLE '*****' NAME 30X 'SALARY LT 20000'
  ELSE
    IF BIRTH GT #BIRTH
      FIND MYVIEW2 WITH PERSONNEL-ID = PERSONNEL-ID (FND1.)
        DISPLAY (IS=ON) NAME BIRTH (EM=YYYY-MM-DD)
                        SALARY (1) MAKE (AL=8 IS=OFF)
      END-FIND
    END-IF
  END-IF
  SKIP 1
END-FIND
END

Ausgabe des Programms IFX02:

        NAME            DATE      ANNUAL     MAKE
                         OF       SALARY
                       BIRTH
-------------------- ---------- ---------- --------
 
***** COHEN                                             SALARY LT 20000
 
CREMER               1972-12-14      20000 FORD
 
***** FLEMING                                           SALARY LT 20000
 
PERREAULT            1950-05-12      30500 CHRYSLER
 
***** SHAW                                              SALARY LT 20000
 
STANWOOD             1946-09-08      31000 CHRYSLER
                                           FORD