「REXX/関数・サブルーチン」の編集履歴(バックアップ)一覧はこちら
「REXX/関数・サブルーチン」(2009/11/11 (水) 19:17:07) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
関数とサブルーチンの違いは、結果を呼び出し元に返すかどうかだけ。
|関数|返す|
|サブルーチン|返さない|
関数
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
関数とサブルーチンの違いは、結果を呼び出し元に返すかどうかだけ。
|関数|返す|
|サブルーチン|返さない|
関数
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