REXX のコーディングに関するヒント

REXX によるあいまいな比較ではなく、ストリングの 精密な比較 を行います。

REXX は、等価テストの = の使用と == の使用を厳密に区別します。(同様のことが、< と <<、およびその他の演算子にも言えますが、最も重要な問題は等価テストです。)

== を使用すると、REXX は引数をストリングとして扱い、変更なしに引数の比較をします。ただし、= を使用すると、REXX は比較を行う前に引数を変換しようとします。REXX は、最初に両方の引数を数値に変換しようとします。これが失敗すると、引数をストリングとして扱い、先行ブランクおよび末尾ブランクを除去してから、結果のストリングの長さが等しくない場合、短いほうのストリングの右側をブランクで埋め込みます。

File Manager REXX プログラミングの経験則では、すべてのストリング比較では== を使用して、数値比較では = を注意して使用することをお勧めします。

精密な等価演算子 (==) を使用する場合、必要に応じてリテラルをブランクで埋め込む必要があります。例えば、各レコードの最初の 10 バイトに大文字の名前と末尾ブランクが含まれている場合、次のステートメントの結果は真です。
FLD(1,10) = 'FRED'
しかし、次のステートメントは偽です。
FLD(1,10) == 'FRED'
2 番目の例で示されるような問題を避けるために (かつ、あいまいな = ではなく推奨される == の使用を維持)、以下の代替手段のいずれかをコーディングします。
  • STRIP(FLD(1,10)) == 'FRED'
  • FLD(1,10) == 'FRED ' (末尾ブランク 6 個)

結論としては、FASTREXX 処理が実行でき、STRIP 機能を使用するとできないため、後者の選択が最適です。

以下に、予期せず起こる可能性がある結果の例をいくつか挙げます。
REXX 結果
IF 'A ' = ' A'
IF 'C140'x = '40C1'x
IF 'A ' == ' A' False
IF '01' = '1 ' True
IF '001' = '1E0' 真 (1E0 は浮動小数)
IF '+ 1.00' = ' 1E0'
IF '12345678901' = 12345678902 真 (整数の場合はデフォルトの REXX 数値精度より長い)