# Conditional Processing - IF Statement

With the `IF` statement, you define a logical condition, and the execution of the statement attached to the `IF` statement then depends on that condition.

This document covers the following topics:

## Structure of IF Statement

The `IF` statement contains three components:

 `IF` In the `IF` clause, you specify the logical condition which is to be met. `THEN` In the `THEN` clause you specify the statement(s) to be executed if this condition is met. `ELSE` In the (optional) `ELSE` clause, you can specify the statement(s) to be executed if this condition is not met.

So, an `IF` statement takes the following general form:

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

Note:
If you wish a certain processing to be performed only if the `IF` condition is not met, you can specify the clause `THEN IGNORE`. The `IGNORE` statement causes the `IF` condition to be ignored if it is met.

#### Example 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```

The `IF` statement block in the above program causes the following conditional processing to be performed:

• `IF` the salary is less than 40000, `THEN` the `WRITE` statement is to be executed;

• otherwise (`ELSE`), that is, if the salary is 40000 or more, the `DISPLAY` statement is to be executed.

Output of Program `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```

#### Example 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 FRANCISCO'
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```

Output of Program `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
===================```

## Nested IF Statements

It is possible to use various nested `IF` statements; for example, you can make the execution of a `THEN` clause dependent on another `IF` statement which you specify in the `THEN` clause.

#### Example:

```** 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```

Output of Program `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```