値渡し
値渡し
【英】pass by value, call by value
値渡しとは、プログラミング言語における関数呼び出し方式の1つで、呼出し側が指定した引数がコピーされたものが関数内部に渡され、使用されるというものである。
一般的に関数の定義に用いられる変数を仮引数、実際の呼出し時に具体的な値が定まった物を実引数と呼ぶ。呼出し元の処理から関数が呼び出されると、関数の先頭で引数の値が初期化される。値渡しの場合には、呼出し時の変数とは別に、同じ内容を持つ、関数内部でのみ使用される内部用の変数が作成される。
関数の引数を値渡しにした場合、関数内部でどのような処理をしても、呼出し元の値には一切影響が及ばない。一方、参照渡し(さんしょうわたし、pass by reference)にした場合は、関数内部の処理が、呼出し元に影響する可能性がある。
関数概念を持つほとんどの現代的なプログラミング言語は値渡しをサポートしている。C言語では、原則として値渡しのみをサポートする。ただし、C言語ではポインタ変数を持つため、ポインタを渡すことにより、擬似的に参照渡しを実現することができる。
なお、関数呼び出しという意味で「call by value」と言う場合もある。
値渡し
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/20 07:25 UTC 版)
値渡し(あたいわたし、call by value)は右辺値を渡す方法で、実引数として変数を渡したとしても、その値のみが渡される。もちろん即値や複雑な式を渡すこともでき、式の評価結果が渡される。その仕組みとしては、独立した新たな変数が関数内に用意され、元の値がコピーされる。そのため変数を渡したとしても、元の変数が変更されるという事はない。 これは「関数が副作用を持たない」という観点から、計算を中心とする言語では望ましい動作といえる。またそもそも代入概念のない関数型言語では、引数は必ず値で渡されると考えられる(ただし、代入が存在しない以上コピーをとる必要もない)。 値渡しを採用した言語としてはC言語、ML、APL、Scheme、Java等が挙げられる。
※この「値渡し」の解説は、「引数」の解説の一部です。
「値渡し」を含む「引数」の記事については、「引数」の概要を参照ください。
- 値渡しのページへのリンク