05.REXX制御文

【2008/11/06 original author TAKAO】

DO, END

Cなどで{}で囲むところをREXXではDO ENDで囲みます。不正確さを承知の上で簡単に説明すると、DO ENDで囲むことで複数の命令が一塊りとして扱われます。

  • DO
  • VAR1 = "HELLO"
  • VAR2 = "WORLD"
  • say VAR1 VAR2
  • END

IFと条件式の評価

IF文などはなにかのプログラミング言語を知っている人ならば、例を見たら説明は必要ないと思います。

  • IF VARIABLE = 0 THEN
  • SAY "zero"
  • ELSE
  • SAY "non zero"

ただ、IF文やループでは必ず「条件式の評価」というのが必要です。比較演算子は以下のものがあります。
>, <, >=, <=, = これらはおなじみでしょうが、<> が等しくない(not equol)です。

Do ループ

条件式でのループの例です。

NUMが3より小さい間、繰り返す

  • NUM = 0
  • DO WHILE NUM < 3
  • SAY "small"
  • END

条件になるまで、繰り返す(WHILEとの違いは必ず一度は行われる)

  • NUM = 4
  • DO UNTIL NUM > 3
  • SAY "LARG"
  • END

決まった回数繰り返す

  • DO 5
  • SAY "hello"
  • END

変数をコントロールしながら繰り返す

  • DO I=1 to 100 BY 2
  • SAY I
  • END

ループから途中で抜けたい場合には、LEAVEか、ITERATEを使います。LEAVEは、もっとも内側のDO ENDを終了してしまいます。ITERATEは、もっとも内側のDO END内をDOに戻って行います。

LEAVEの例:

  • DO 4
  • say "--"
  • DO 3
  • SAY "test"
  • LEAVE
  • END
  • END

結果:

  • --
  • test
  • --
  • test
  • --
  • test
  • --
  • test

ITERATEの例

  • DO 3
  • SAY "--"
  • DO 5
  • SAY "test"
  • ITERATE
  • SAY "test2"
  • END
  • END

結果:

  • --
  • test
  • test
  • test
  • test
  • test
  • --
  • test
  • test
  • test
  • test
  • test
  • --
  • test
  • test
  • test
  • test
  • test

SELECT, WHEN, OTHERWISE, END

REXXのSELECT文は、あまり便利とはいえません。以下のように違う条件を書け、わかりにくくなる可能性があります。

  • VAR1 = "blue"
  • VAR2 = "yellow"
  • SELECT
  • WHEN VAR1 = "blue" THEN SAY "blue"
  • WHEN VAR2 = "red" THEN SAY "red"
  • WHEN VAR2 = "yellow" THEN SAY "yellow"
  • OTHERWISE
  • SAY "white"
  • END

NOP

なにもしない命令です。こういう時に使います。

  • IF A=B THEN
  • NOP
  • ELSE
  • SAY "not qual"

以上で制御系はおわりです。

【2008/11/06 original author TAKAO】