×
データ構造とアルゴリズム

引数(ひきすう・パラメータ)は、関数という「処理のブラックボックス」に対して、外部から材料(データ)を投入するための重要な窓口(インターフェース)としての役割を果たします。関数は引数を受け取ることで、固定された一つの計算しかできないただのプログラムの塊から、様々なデータに対応できる汎用的で再利用可能な「部品」へと進化します。

引数の扱い方に関して、プログラミングにおいて非常に重要かつ奥深い概念として「値渡し(Call by Value)」と「参照渡し(Call by Reference)」という2つの渡し方の違いがあります。

「値渡し」とは、呼び出し元にある変数のデータの中身(値そのもの)だけをコピーして、関数の仮引数に渡す方式です。この場合、関数の中で受け取った仮引数の値を書き換えたとしても、それはあくまでコピーを変更しただけなので、呼び出し元にある元の変数の値には一切影響を与えません。安全性が高い反面、巨大なデータをコピーする際にメモリや処理時間を余分に消費するという側面があります。

一方「参照渡し」とは、データそのものではなく、データが保存されているメモリ上の「場所(アドレス、参照)」を関数に渡す方式です。関数側はそのアドレスを頼りに直接元のデータにアクセスするため、関数の中で値を書き換えると、呼び出し元の変数の値も連動して書き換わってしまいます(副作用が発生する)。配列や巨大なオブジェクトを関数に渡す際には、メモリ効率を良くするためにこの参照渡し(またはそれに近い仕組み)が暗黙的に使われることが多く、プログラマーは「関数の中で値を変更したら、外のデータも変わってしまうのかどうか」を常に意識してコーディングを行う必要があります。