最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.28.ハッピーエンドの為に

[ Previous ] [ HOME ] [ Upper ] [ Next ]


ENDの種類

RPGの命令語に、ENDxxがあります。これは、必ず、対になる命令コードを持っていて、その命令コードを開始として、その終了部分を指定するのがENDxxです。昔は、どんな場合もENDしか無かったのですが、その後追加されて、ENDCS、ENDDO, ENDIF, ENDSLが追加されました。
コード 対になる開始の命令語 条件標識 演算2
END  CASxx、DO、DOUxx、DOWxx、IFxx、またはSELEC  DO,DOU,DOWの終結の場合のみ可能 DOの終結の場合のみ増分値
ENDCS CASxx 不可  
ENDDO DO 可能 増分値
DOUxx、または DOWxx 可能  
ENDIF IFxx 不可  
ENDSL SELEC 不可  

たとえば、指定の仕方は、以下のようになります。

 B001 C           *IN80     IFEQ *OFF                       
  001 C                     MOVE COLOR     W1OLDC           
  001 C                     MOVE *ON       *IN80            
 E001 C                     END                           
      C*                                                    
 B001 C           COLOR     IFNE W1OLDC                     
  001 C                     EXCPT#TOL                       
  001 C                     Z-ADD0         O1CNT   50       
  001 C                     MOVE COLOR     W1OLDC           
 E001 C                     ENDIF                           

このように、ENDでも、ENDxxでも、どちらでもコンパイルエラーにはならないのですが、そのソースを見やすく、また、構造化を強調して、ENDxxを付けています。DOやIFも、ネストレベルが深くなると、このENDが何のENDか分からなくなることがあります。また、作っているときに、勘違いしている場合もあり、コンパイルで重大度20を出す場合もあります。ENDだけだと、漠然としていたものが、ENDIFとすると、「このENDはIFの終結」、「このENDはDOの終結」と明確になります。

ネストの考え方

nestは、英語で「巣」または「入れ子型の箱(大きい箱の中に、一回り小さな箱を入れている状態)」の意味があります。コンピュータ言語では、ネストと言えば、「入れ子型の箱」を意味します。下の絵を見て下さい。IF-ENDIF (1)の中に、IF-ENDIF (2)とIF-ENDIF (5)が入っていて、さらに、IF-ENDIF (2)の中にDO-ENDDO (3)が入っています。さらにDO-ENDDO (3)の中には、IF-ENDIF (4)が入っていますね。あたかも、一番大きなIF-END(1)の箱の中に、一回り小さなIF-END(2)の箱が入っている見たいですね。この状態をネストもしくはネスティングといいます。また、IFで出来るネストをIFネストともいいます。でも、DOの場合はDOループとよく言います。

IF (1)

IF (2)

DO (3)

IF (4)

ENDIF

ENDDO

ENDIF

ELSE

IF (5)

DO (6)

ENDDO

ENDIF

ENDIF

RPGでは、このネストは100個まで可能です。でも、だからといって、100個も立て続けにネストするプログラムを作る人はいません。というより、そんなことして欲しくないです。あまり、ネストが深くなると、わかりにくくなるのです。

上の例でも分かるように、一つのネストの箱は、IFと対応するENDIF, DOと対応するENDDOで構成されます。このペアはとても大切です。論理そのものに影響します。

この例では、コンパイルはとおります(コンパイルは成功します)。DO-ENDDOの中に、IF-ENDIFが入っています。
 B001 C           COLOR     DOWEQW1OLDC                      
 B002 C           *IN80     IFEQ *OFF                       
  002 C                     MOVE COLOR     W1OLDC           
  002 C                     MOVE *ON       *IN80            
 E002 C                     ENDIF                           
 E001 C                     ENDDO                           

この例では、コンパイルはとおりません(コンパイルは失敗します)。ENDIFとENDDOが逆になっています。「DO-ENDIF」や「IF-ENDDO」は、エラーなのです。
 B001 C           COLOR     DOWEQW1OLDC                      
 B002 C           *IN80     IFEQ *OFF                       
  002 C                     MOVE COLOR     W1OLDC           
  002 C                     MOVE *ON       *IN80            
 E002 C                     ENDDO                           
 E001 C                     ENDIF                           

こんな短いプログラムでミスする人はいないでしょうが、実際のプログラムだと、長くなり、また気が付かなかったりしますよね。なるべく、ENDxxにして、コンパイラに検査させて、ロジックのミスを減らした方がいいでしょう。

大同小異

この中で、注意すべきは、DOグループとそれに対になるEND、ENDDOです。以下の表は「必ず」、丹念に、全て読んで、「必ず」理解して下さい。とても、重要なことがたくさん出ています。

AS/400 RPG/400 解説書 より

ステップ DO DOUxx

DOWxx 

1 DO / DOUxx / DOWxxステートメント行の条件付け標識が充足されると、DO命令が実行されます(ステップ2)。標識が充足されない場合には、対応する ENDDO ステートメントの次の実行可能な命令に制御が渡されます(ステップ7)。
2 開始値(演算項目1)が指標フィールド(結果フィールド)に移されて DO 命令が始められます。 実行可能な次の命令に制御が渡されて、DOUxx 命令が実行されます(ステップ4)。DOUxx 命令ではこの時点では演算項目1と演算項目2は比較されず、ま た指定した条件もテストされません。 演算項目1と演算項目2の比較、あるいは DOWxx、ANDxx、または ORxx命令を 組み合わせて指定した条件がテストされて、DOWxx 命令が実行されます。演算 項目1と演算項目2の間のxx 関係または命令を組み合わせて指定した条件が 存在しない場合には、DOグループは終了して ENDDO ステートメントの次にある演算命令に制御が移ります(ステップ7)。演算項目1と演算項目2の間の xx 関係または命令を組み合わせて指定した条件が存在する場合には、DOグループ内の命令が反復されます(ステップ4)。
3 指標値が限界値より大きくなると、対応する ENDDO ステートメントの次の演算命令に制御が渡されます(ステップ7)。そうでない場合には、DO ステートメントの後の最初の命令に制御が渡されます(ステップ4)。
4 DO グループ内の各命令が実行されます。
5 ENDDO ステートメント上の条件付け標識が充足されない場合には、対応するENDDO ステートメントの次の演算命令に制御が渡されます(ステップ7)。そうでない場合には、 ENDDO命令が実行されます(ステップ6)。
6 指標フィールドに増分値を加えて ENDDO 命令が実行されます。制御がステップ3に移ります。(制御がステップ3に移った場合には、DOステートメントの条件付け標識は再びテスト(ステップ1)されないことに注意してください。) ENDDO命令は、DOUxxの演算項目1と演算項目2の比較、あるいは(DOUxx、ANDxx、または ORxx)命令を組み合わせて指定した条件をテストすることによって実行されます。xx の関係が演算項目1と演算項目2の間に存在する場合、または指定した条件が存在する場合には、DOグループは終了して ENDDO ステートメントの後にある次の演算命令に制御が渡されます(ステップ7)。演算項目1と演算項目2の間に xx関係が存在しない場合、または指定した条件が存在しない場合には、DOグループの命令は反復されます(ステップ4)。 ENDDO 命令が実行されると、DOWxx 命令に制御が渡されます(ステップ2)。(DOWxx ステートメント上の条件付け標識はステップ1では再度テストされないことに注意してください。)
7 DO / DOUxx / DOWxxステートメント または ENDDO ステートメントの条件付け標識が充足されない場合(ステップ1または5)、あるいは
指標の値が限界値より大きい場合 には、(ステップ3)、  演算項目1と演算項目2の間のxx 関係または 指定した条件がステップ5において存在する場合には、 指定した条件の演算項目1と演 算項目2の間の xx関係がステップ2において存在しない場合には、
ENDDO ステートメントの後のステートメントが実行 されます。

以上

2000-2-6


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

給料前でお金がない・・ 過払い金の回収ならこちら 過払い金の回収ならこちら
[PR] | 花粉症債務整理中国SEO対策消費者金融SEO車 買取テンプレート沖縄旅行免許合宿二輪引越しプレゼントゴルフ会員権留学レーシックマッサージFX投資信託くりっく365アフィリエイトFXホームページ制作デイトレードハワイ旅行タイバンコクハワイ レンタカーベスト ハワイ ホテル レーツバリ島Hawaii hotelsHawaii Activitiesbhhrハワイホテルテキスト広告
【運営会社「パラダイムシフト」サービス】 ハワイ現地オプショナルツアーリラックマ) - ビジネスクラス航空券 - 格安航空券(1) - 格安航空券(2) - 海外ホテル - 韓国旅行 - タイムシェア - ホテル 予約
無料ホームページ - 携帯ホームページ - 無料ホームページ作成 - レンタルサーバー - ブログ - ヴィラ - ハワイ コンドミニアム - バリ島 ホテル - プーケット ホテル - 海外旅行 - 格安国際電話 - レップチェッカー - ホノルルマラソン - サイトパトロール - 誹謗中傷 - 学校裏サイト監視