2009年1月3日土曜日

引数と渡し方

新年、初出社日用のネタのため、古い記憶を整理するため。
昔のノート等を引っ張り出すのが億劫ですので、
Wikipediaや他サイトを多分に参考にします。本来のBlogっぽい。
手続き型言語についてまとめます。関数型言語はもっとややこしいので
ここでは考えないことにします。

[仮引数と実引数]
仮引数は、サブルーチンの定義において、渡されるであろう値に
名前を付けたもの。
実引数は、サブルーチンの呼び出しにおいて、実際に渡される値。

[値渡し]
別の場所に変数値のコピーを作り、コピーをサブルーチンに渡す。
サブルーチン内で値を変更してもコピー元を持つサブルーチン
呼び出し側には影響がない。

採用している言語:C言語、Java

Javaについて参考:
http://java-house.jp/ml/archive/j-h-b/026214.html#body
参照型という”型”と参照渡しという”渡し方”を一緒にしてはいけない
というお話しともとれる。

[参照渡し]
変数への参照をサブルーチンに渡す。サブルーチンで引数の値を
変更すると呼び出し側の変数の値も変わる。

採用している言語:Fortran
サポートしている言語:Pascal、C++、C#

Pascalで、仮引数名の前にvarを付けると参照になります。
inとかoutとか付けていたように思っていたのは完全に記憶違いでした。
つまり、私が仮引数名にinとかoutとか付けていたのでした。
恥ずかしいですね。

C++では計算コストに成り得るコピーを削減するため参照渡しが使われる
ことが多い。その際、呼び出し側に影響を与えないことを宣言するため
constと併用されることもある。

[名前渡し]
ALGOLを知らないのでわからないです。
名前そのものを渡す。仮引数が参照されるたびに名前が評価され、
仮引数名と実引数名が置換される。

採用している言語:ALGOL

0 件のコメント:

コメントを投稿