引数(ひきすう)、パラメータ(ー)(英語:parameter)は、数学における関数やコンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のことである。数学や最適化問題に関するそれ(「パラメータ」とカタカナで表現されることが多い)については「媒介変数」の記事を参照のこと。以下は専らコンピュータプログラミングに関して説明する。関数・サブルーチン・メソッド等を定義する時に、外部から値を渡される特別な変数として指定されるのが仮引数。関数(等)を呼出す式において、仮引数に対応する式(あるいはその値)が実引数である。実行時には、実引数の値を仮引数が受け取る。「引数」を「いんすう」と読む読み方もある[1][2][3]が、術語としては変則的に湯桶読みして「ひきすう」としている。数学分野で因数(factor)との取違えを防ぐためといった理由もある。(argument))とは、手続き(プロシージャー)で定義される変数のうち、実行時に呼び出し元から渡される(実引数の)値を受けるものをいう。変数のように使用されていることに注目されたい。(parameter))とは、プロシージャーを呼び出す際に渡す値のことで、プロシージャーの挙動(動作や結果)に作用する。変数やリテラルを含む式を指定できる。value)は右辺値を渡す方法で、実引数として変数を渡したとしても、その値のみが渡される。値や複雑な式を渡すこともでき、式の評価結果が渡される。その仕組みとしては、独立した新たな変数が関数内に用意され、元の値がコピーされる。そのため変数を渡したとしても、元の変数が変更されるという事はない。これは「関数が副作用を持たない」という観点から、計算を中心とする言語では望ましい動作といえる。そもそも代入概念のない関数型言語では、引数は必ず値で渡されると考えられる(ただし、代入が存在しない以上コピーをとる必要もない)。値渡しを採用した言語としてはC言語、ML、APL、Scheme、Java等が挙げられる。ポインタ渡し[編集]C言語やC++のポインタ変数が保持する値は変数に対する参照(メモリアドレス)であり、後述の参照渡しの参照と似た性質を持つ。このため、ポインタ変数を値渡しすると、値渡しでありながら参照渡しと似たような効果を得ることができる。このため、ポインタ(=メモリアドレス)を値渡しする事を単なる値渡しと区別して俗にポインタ渡しなどと呼ぶ事もある。variable)は、変数そのもの(左辺値)を渡す方法で、この場合は仮引数に対する操作がそのまま実引数(渡された変数)に影響する。多くの言語では(とくに配列のようなデータ構造を戻り値にできない場合)戻り値はひとつの値だけしか返せないが、データベース検索などで見つかったかどうかと、見つかったならその値も知らせるような場合に、見つかったかどうかを戻り値にして、検索結果の値は適当な引数を変更するといった使い方ができる。reference)はその実装手段の一つ(と見ることもできる[5])。変数に対する参照(アドレス情報)を渡す方法である(これは言語側が勝手に行う。C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない)。その他、値渡しと同じようにコピーを渡しておいて、関数/サブルーチンからのリターン時に元の変数に変更結果をコピーしなおす方法もある(これは変数の共有(エイリアス)や再帰呼出しがあると奇妙な結果になることがある)。PL/Iでは、どちらの方法で実装しても良いと規定されている。原始的な言語であるFORTRANは機械語のアドレス操作を反映した参照渡ししか持たなかった。indexと呼ばれている。BASIC等の構造化BASICなどが挙げられる。変数渡しの関数・サブルーチンに、実引数として変数以外(右辺値)を渡した場合にどうなるかは、言語によって異なる。BASIC等)、「未定義の動作」をひきおこし、何が起こるか全く予測がつかない言語(FORTRAN等)がある。値渡しによる引数の変更[編集]C言語は値渡しのみをサポートするが、変数のポインタ(メモリアドレス)を取得することが可能であるため、変数へのポインタを値で渡す事で元の変数を変更できる。オフセット計算により配列や構造体の一部分を参照するコードも容易に記述できる。これは、実際の変数領域を逸脱した部分をも参照できるので、あくまでも値渡しによる参照渡しのエミュレートである。参照渡しをサポートする言語でも内部的には同様の操作を行っているが、それは何らかの意味で言語の保護下にある参照となる。参照の値渡し[編集]参照渡しで言うところの「参照」と呼ばれているものと、特定の言語で「参照」と呼ばれているものが必ずしも同じでない事には注意が必要。Javaは参照型を扱うための『Javaの「参照」』を持つが、これはPascal等のポインタ相当で、『参照渡しの「参照」』とは概念が違うため、『Javaの「参照」』を渡しても参照渡しであるとは言えない。C言語の「ポインタの値渡し」と同じである[6]。これは、Javaの参照型と似た参照型と、Javaのプリミティブ型に近い値型を持つC#を見ると理解しやすいだろう。使用する事によって参照渡しにする事ができる。『C#の値型』を渡すから値渡し、『C#の参照型』を渡すから参照渡しとはならない。値渡しと変数渡しのどちらでも行える。変数渡しの場合は手続き・関数の引数にvarを付ける。いるので、i,jの値は入れ替わる。見られる形態で、値が実際に必要になるまで計算を行わない方法。概念上は、計算方法を遅延したthunkと呼ばれるオブジェクトが渡っていると考えられる。名前渡し[編集]ALGOLで採用されていた特徴的な機能の一つである。名前渡しでは値でも参照でもなく、式がそのまま渡される。基本的には参照渡しのように振る舞うが、式を参照するごとに値を計算して取り出す事が特徴である。C言語のプリプロセッサのマクロ展開と似ているが、引数と、ローカル変数が衝突しないように配慮はされる。次のような例は名前渡しに特徴的な動作と言われる。y=a[i]という"式"を渡すとする。y;xはiを渡されているのでiがyの値になる。yはa[i]だから、iはaの2番目の値になる。tmp;yはaのi番目の値だが、前手順によりiはa[2]になっている。従ってy=a[a[2]]になる。このような複雑さもあって、ALGOL以外で名前渡しが採用された事例はほとんどない。日立ソリューションズIT用語辞典。同サイトの引数の項では「ひきすう」という読みのみ。変数以外から成る任意の式に対して、その左辺値というものは考えづらいため。名前のない変数がテンポラリに作られるかのように振舞うものもある。この項目は、コンピュータに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。