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

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

よく使うマニュアルです

Wiki

updated on 2004.06.23

13.13. *LGL変数

[ Previous ] [ HOME ] [ Upper ]


ここでは、論理式について、考えてみましょう。

参考マニュアル

IF &FOUND DO
    ....
ENDDO

を見て、ははーん、このことか、とわかった方は、このページを見る必要はありません。このソースの意味がわからない人のためのページです。

さて、質問です。上記のソースがコンパイル成功したソースの一部だとすると、&FOUNDのデータタイプは何でしょう?

答え;論理変数です。*LGLですね。

割と経験のある方でも、

	IF   ( &FOUND = '1' ) DO
	...
	ENDDO

としている方がいます。IFの次にくるのが論理式の場合、この記法は、逆に論理変数の簡便性を失ってしまいます。

実は、RPGIVでも、論理変数の概念は、同じです。

	IF    IND
	...
	ENDIF
は、
	IF    ( IND = '1') 
	...
 	ENDIF

と同じです。これは、RPGIVでV4R4でサポートされた、標識変数を使っています。CLPの*LGLと同じです。

これは、CLPもRPGも、さらにほとんどのほかの言語も同じことですが、論理式というのは、最終的に、論理値(真と偽)と置き換えられて、プログラムで解釈されます。

もし、&A=10で&B=100ならば、

IF (&A < &B) DO
...
ENDDO

は、

IF (真)DO
...
ENDO

と同じ結果になります。

そして、IFという構文は、IF ()内が、論理的に真の場合に実行するものです。この部分が直感的に、本当にわかるのには、個人差があると思います。実は最初、私もわからなかったのです。いえ、頭ではわかっていても、感覚的に、違和感を最初感じていました。でも、ある日、突然、違和感を感じなくなりました。意外かも知れませんが、IF (真)Thenの形式が基本形で、その真偽の判定に「式」を入れることが発展形式だと思います。式と式で判定したり、式と論理結果で真偽を判定することもできます。

否定したいときは

*NOTか¬(半角で)ですが、¬は半角だとEBCDIC -> SJISなどにしたときコードページによって出てこないこともあるので、*NOTのほうがいいとおもいます。CLPで使われる式内部の否定形も、¬=ではなくて*NE のほうがいいと思います。なおRPG IVの標識の否定は、IF      NOT IND  などと記入します。

このページの趣旨は、無駄なコードの記入で冗長したソースを避けるのが主たる目的です。複雑な分岐の条件式を簡易に見やすくできる可能性があります。

/* 論理変数 OFF */

    CHGVAR  &AB  '0'

    CHGVAR  &CD  '0'

    CHGVAR  &EF  '0'

    CHGVAR  &GH  '0'

/* 真偽判定 */

IF (&A > &B)  CHGVAR &AB  '1'

IF (&C < &D)  CHGVAR &CD  '1'

IF (&E = &F)   CHGVAR &EF  '1'

IF (&G > &H)  CHGVAR &GH  '1'

/* 実行 */

IF (&AB  *AND &CD *AND &EF *AND &GH) DO  

...  

ENDDO

IF (*NOT AB)  DO

...

ENDDO

...

以上

2004-6-13

 

[ Previous ] [ HOME ] [ Upper ]

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

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送