IF

ストラクチャードモード構文

IF logical-condition
  [THEN] statement
  [ELSEstatement ]
END-IF

レポーティングモード構文

IF logical-condition
  [THEN]

statement

 
DO statement DOEND

ELSE

statement
DO statement DOEND

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:DECIDE FOR | DECIDE ON | IF SELECTION | ON ERROR

関連機能グループ:論理条件の処理


関数

IF ステートメントは、論理条件に基づいて、ステートメントあるいはステートメント群の実行を制御します。

注意:
条件に合うときに何もしない場合は、THEN 節に IGNORE ステートメントを指定する必要があります。

構文説明

構文要素 説明
IF logical-condition
論理条件の基準:

IF ステートメントに続いて、指定されたステートメント(群)が実行されるかどうかを判定する論理的な条件です。

例:

IF #A = #B
IF LEAVE-TAKEN GT 30
IF #SALARY(1) * 1.15 GT 5000
IF SALARY (4) = 5000 THRU 6000
IF DEPT = 'A10' OR = 'A20' OR = 'A30'

詳細については、『プログラミングガイド』の「論理条件基準」を参照してください。

THEN statement
THEN 節:

THEN 節では、論理条件が真である場合に実行される statement(群)を指定します。

ELSE statement
ELSE 節:

ELSE 節では、論理条件が真でない場合に実行される statement(群)を指定します。

END-IF
IF ステートメントの終了:

ストラクチャードモードでは、IF ステートメントを終了するには、Natural の予約語 END-IF を使用する必要があります。

レポーティングモードでは、DO ... DOEND ステートメントを使用して、状況に応じて 1 つまたは複数の適切なステートメントを指定し、節と IF ステートメントを終了します。単一のステートメントのみを指定する場合は、DO ... DOEND ステートメントを省略できます。よいコーディング習慣に則して、これはお勧めしません。

statement
DO statement ... DOEND

** Example 'IFEX1S': IF (structured mode)                               
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 SALARY (1)                                                          
  2 BIRTH                                                               
1 VEHIC-VIEW VIEW OF VEHICLES                                           
  2 PERSONNEL-ID                                                        
  2 MAKE                                                                
*                                                                       
1 #BIRTH (D)                                                            
END-DEFINE                                                              
*                                                                       
MOVE EDITED '19450101' TO #BIRTH (EM=YYYYMMDD)                          
SUSPEND IDENTICAL SUPPRESS                                              
LIMIT 20                                                                
*                                                            
FND. FIND EMPLOY-VIEW WITH CITY = 'FRANKFURT'                
          SORTED BY NAME BIRTH                               
  IF SALARY (1) LT 40000                                     
    WRITE NOTITLE '*****' NAME 30X 'SALARY LT 40000'         
  ELSE                                                       
    IF BIRTH GT #BIRTH                                       
      FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (FND.)
        DISPLAY (IS=ON)                                      
                NAME BIRTH (EM=YYYY-MM-DD)                   
                SALARY (1) MAKE (AL=8)                       
      END-FIND                                               
    END-IF                                                   
  END-IF                                                  
END-FIND                                                     
END

プログラム IFEX1S の出力:

        NAME            DATE      ANNUAL     MAKE                      
                         OF       SALARY                               
                       BIRTH                                           
-------------------- ---------- ---------- --------                    
                                                                       
BAECKER              1956-01-05      74400 BMW                         
***** BECKER                                            SALARY LT 40000
BLOEMER              1979-11-07      45200 FIAT                        
FALTER               1954-05-23      70800 FORD                        
***** FALTER                                            SALARY LT 40000
***** GROTHE                                            SALARY LT 40000
***** HEILBROCK                                         SALARY LT 40000
***** HESCHMANN                                         SALARY LT 40000
HUCH                 1952-09-12      67200 MERCEDES                    
***** KICKSTEIN                                         SALARY LT 40000
***** KLEENE                                            SALARY LT 40000
***** KRAMER                                            SALARY LT 40000

レポーティングモードの例については、次のプログラムを参照してください:IFEX1R