13.13. *LGL変数 |
ここでは、論理式について、考えてみましょう。
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 */
/* 真偽判定 */
/* 実行 */
以上 2004-6-13 |
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||