「REXX/関数・サブルーチン」の編集履歴(バックアップ)一覧はこちら
追加された行はこの色になります。
削除された行はこの色になります。
関数とサブルーチンの違いは、結果を呼び出し元に返すかどうかだけ。 |関数|返す| |サブルーチン|返さない| 関数 J=FUNC(2) /* 関数っぽく呼び出せる SAY J /* 4 EXIT FUNC: PROCEDURE ARG N RETURN N*N *変数のスコープ -関数・サブルーチンの中では、変数スコープは完全に独立しており、呼び出し元の変数は参照できない。 +関数・サブルーチンの中では、変数スコープは完全に独立している。 (逆に言えば、呼び出し元と同じ変数を使用しても影響を与えない) -引数は値渡しである。 +引数は、値渡し、参照渡しいずれも可能。 + +**値渡し +-基本は値渡し +-配列を渡すことはできない I=10 CALL SUB I SAY I /* 10 EXIT SUB: PROCEDURE ARG I SAY I /* 10 I=50 /* Iを変更 SAY I /* 50 + RETURN + +**参照渡し +-配列を渡すことも可能 +-参照渡しをする変数名が固定されてしまうので、サブルーチンの可搬性が低下し、美しくない + I=10 + ARRAY.=0 + CALL SUB + SAY I /* 50 10 ではない + SAY ARRAY.2 /* 100 0 ではない + EXIT + + SUB: PROCEDURE EXPOSE I ARRAY. /* I と ARRAY. を参照渡しとする(名前はここで決まってしまう) + SAY I /* 10 + I=50 /* Iを変更 + SAY I /* 50 + + ARRAY.2=100 + RETURN + +参照渡しをする変数名を、実行時に指定するようにすることも可能ではある。 +この例では、参照渡しする変数の名前を REFERENCE という変数が示す。 +でも REFERENCE という名前は、サブルーチンで固定されてしまうので、結局可搬性はあんまりよくない。 + I=100 + REFERENCE='I' + CALL SUB + SAY I /* 500 + + K=200 + REFERENCE='K' + CALL SUB + SAY K /* 500 + EXIT + + SUB: PROCEDURE (REFERENCE) /* 参照渡しする変数名を示す変数は REFERENCE という名前にすると決める + REF=WORD(REFERENCE,1) /* REFERENCE の最初のワードが、参照渡しされた変数名 + SAY VALUE(REF) /* 最初の呼び出しでは 100、2番目では 200 + VALUE(REF,500) RETURN
2010-11-09
2009-12-27
2009-11-11
2009-10-30