引数とは? わかりやすく解説

ひき‐すう【引数】


引数

述語項または複合項付随する項。
例: f(1,X)の1およびX

引数

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/09/11 13:18 UTC 版)

引数(ひきすう、: parameter, argument)は、数学における関数コンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のことである。

数学最適化問題に関するそれ(「パラメータ」とカタカナで表現されることが多い)については「媒介変数」の記事を参照のこと。以下は専らコンピュータプログラミングに関して説明する。

関数サブルーチンメソッド等を定義する時に、外部から値を渡される特別な変数として指定されるのが仮引数。関数(等)を呼出す式において、仮引数に対応する式(あるいはその値)が実引数である。実行時には、実引数の値を仮引数が受け取る。

「引数」を「いんすう」と読む読み方もある[1][2]が、術語としては変則的に湯桶読みして「ひきすう」としている。数学分野で因数(factor)との取違えを防ぐためといった理由もある。

仮引数

仮引数(かりひきすう、かびきすう、parameterformal parameter (formal argument))とは、手続き(プロシージャー)で定義される変数のうち、実行時に呼び出し元から渡される(実引数の)値を受けるものをいう。例としてC言語系言語における定義を挙げる:

int sum(int addend1, int addend2)
{
    return addend1 + addend2;
}

上の定義では、

  • int 型の仮引数 addend1
  • int 型の仮引数 addend2

2つを伴った関数 sum を定義している。定義の中で addend1addend2 が変数のように使用されていることに注目されたい。

実引数

実引数(じつひきすう、argumentactual argument (actual parameter))とは、プロシージャーを呼び出す際に渡す値のことで、プロシージャーの挙動(動作や結果)に作用する。変数やリテラルを含むを指定できる。C言語系言語において前に示した例中の関数 sum を用いた例を挙げる:

 sum(123, 456);

上の文は、

  • 仮引数 addend1 に対応する実引数 123
  • 仮引数 addend2 に対応する実引数 456

2つを関数 sum に渡している[3]

評価戦略

値渡し

値渡し(あたいわたし、call by value)は右辺値を渡す方法で、実引数として変数を渡したとしても、その値のみが渡される。もちろん即値や複雑な式を渡すこともでき、式の評価結果が渡される。その仕組みとしては、独立した新たな変数が関数内に用意され、元の値がコピーされる。そのため変数を渡したとしても、元の変数が変更されるという事はない。

これは「関数が副作用を持たない」という観点から、計算を中心とする言語では望ましい動作といえる。またそもそも代入概念のない関数型言語では、引数は必ず値で渡されると考えられる(ただし、代入が存在しない以上コピーをとる必要もない)。

値渡しを採用した言語としてはC言語MLAPLSchemeJava等が挙げられる。

ポインタ渡し

アドレス渡し(call-by-adress)とも呼ぶ。 C言語C++ポインタが保持する値はオブジェクトに対する参照(メモリアドレス)であり、後述の参照渡しの参照と似た性質を持つ。このため、ポインタ変数を値渡しすると、値渡しでありながら参照渡しと似たような効果を得ることができる。このため、ポインタ(=メモリアドレス)を値渡しする事を単なる値渡しと区別して俗にポインタ渡しなどと呼ぶ事もある。

名前渡し

ALGOLで採用されていた特徴的な機能の一つである。名前渡しでは値でも参照でもなく、式がそのまま渡される。基本的には参照渡しのように振る舞うが、式を参照するごとに値を計算して取り出す事が特徴である。C言語のプリプロセッサのマクロ展開と似ているが、引数と、ローカル変数が衝突しないように配慮はされる。 次のような例は名前渡しに特徴的な動作と言われる。

swap(x,y) {
 tmp = x;
 x = y;
 y = tmp;
}

この例に対し、x=i, y=a[i]という"式"を渡すとする。仮にi=2だったとすると、

tmp = x;
x=i=2 なのでtmp2になる。
x = y;
xiを渡されているのでiyの値になる。ya[i]だから、iaの2番目の値になる。
y = tmp;
yai番目の値だが、前手順によりia[2]になっている。従ってy=a[a[2]]になる。

このような複雑さもあって、ALGOL以外で名前渡しが採用された事例はほとんどない[4]

変数渡し

変数渡し(へんすうわたし、call by variable)は、変数そのもの(左辺値)を渡す方法で、この場合は仮引数に対する操作がそのまま実引数(渡された変数)に影響する。 多くの言語では(とくに配列のようなデータ構造を戻り値にできない場合)戻り値はひとつの値だけしか返せないが、データベース検索などで見つかったかどうかと、見つかったならその値も知らせるような場合に、見つかったかどうかを戻り値にして、検索結果の値は適当な引数を変更するといった使い方ができる。

参照渡し(さんしょうわたし、call by reference)はその実装手段の一つ(と見ることもできる[5])。変数に対する参照(アドレス情報)を渡す方法である(これは言語側が勝手に行う。C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない)。

その他、値渡しと同じようにコピーを渡しておいて、関数/サブルーチンからのリターン時に元の変数に変更結果をコピーしなおす方法もある(これは変数の共有(エイリアス)や再帰呼出しがあると奇妙な結果になることがある)。PL/Iでは、どちらの方法で実装しても良いと規定されている。

原始的な言語であるFORTRANは機械語のアドレス操作を反映した参照渡ししか持たなかった。これは特にcall by indexと呼ばれている。

他に変数渡しをサポートする言語としては、PascalPerlC++C#Quick BASIC等の構造化BASICなどが挙げられる。

なお変数渡しの関数・サブルーチンに、実引数として変数以外(右辺値)を渡した場合にどうなるかは、言語によって異なる。そのような操作が禁止されており、エラーが発生する言語(Pascal等)、テンポラリな変数を作成し、リターン時にそれを捨ててしまうため、値渡しと同じことができる言語(Quick BASIC等)、「未定義の動作」をひきおこし、何が起こるか全く予測がつかない言語(FORTRAN等)がある。C++ではconst修飾されていない型への参照に右辺値を渡すとエラーになるが、const修飾されていれば一時オブジェクトが作成され、また右辺値のみを参照できる「右辺値参照」が存在する。

値渡しによる引数の変更

C言語は値渡しのみをサポートするが、変数のポインタ(メモリアドレス)を取得することが可能であるため、変数へのポインタを値で渡す事で元の変数を変更できる。オフセット計算により配列や構造体の一部分を参照するコードも容易に記述できる。

しかしこれは、実際の変数領域を逸脱した部分をも参照できるので、あくまでも値渡しによる参照渡しのエミュレートである。参照渡しをサポートする言語でも内部的には同様の操作を行っているが、それは何らかの意味で言語の保護下にある参照となる。

参照の値渡し

参照渡しで言うところの「参照」と呼ばれているものと、特定の言語で「参照」と呼ばれているものが必ずしも同じでない事には注意が必要。例えば、Javaは参照型を扱うための『Javaの「参照」』を持つが、これはPascal等のポインタ相当で、『参照渡しの「参照」』とは概念が違うため、『Javaの「参照」』を渡しても参照渡しであるとは言えない。C言語の「ポインタの値渡し」と同じである[6] 。これは、Javaの参照型と似た参照型と、Javaのプリミティブ型に近い値型を持つC#を見ると理解しやすいだろう。C#では、特に指定しなければ参照型も値型も値渡しされるが、引数に ref もしくは out を使用する事によって参照渡しにする事ができる。『C#の値型』を渡すから値渡し、『C#の参照型』を渡すから参照渡しとはならない。

例:Pascalの変数渡し

Pascalの手続き(procedure)や関数(function)では、原始型(integer, realなど) の値渡しと変数渡しのどちらでも行える。変数渡しの場合は手続き・関数の引数にvarを付ける。

{ 手続き swap 内で a,b の値を入れ替える。
  sampleの i,j は変数渡しされ、aとi、bとjは同じアドレスを指して
  いるので、i,jの値は入れ替わる。 }

procedure swap(var a,b:integer);  { var をつけると変数渡し }
  var tmp:integer;
  begin
    tmp := a; a := b; b := tmp
  end;

procedure sample();
  var i, j:integer;
  begin
    i := 5;
    j := 10;
    swap(i, j);
    ... { iは10, jは5になる }
  end;

遅延評価

Haskellなどの遅延評価型関数言語に見られる形態で、値が実際に必要になるまで計算を行わない方法。概念上は、計算方法を遅延したthunkと呼ばれるオブジェクトが渡っていると考えられる。

脚注

  1. ^ KAKASI (Kanji Kana Simple inversion program) MIT
  2. ^ Javascript練習 09 京都産業大学
  3. ^ ちなみに、上の文の結果は 579 である
  4. ^ とはいえ中島秀之によれば、DEC 10 Prologの移植に際して、「修羅場を見た」と述べている。
  5. ^ 変数以外から成る任意の式に対して、その左辺値というものは考えづらいため。あたかも名前のない変数がテンポラリに作られるかのように振舞うものもある。
  6. ^ JavaHouse-Brewers の議論

関連項目


引数

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2016/03/08 15:17 UTC 版)

exec」の記事における「引数」の解説

path - 新プロセスイメージとして実行すべきファイルパス名を指定するfile - 新プロセスイメージとして実行すべきファイルパス名を指定する。ただしスラッシュ含まれていない場合環境変数 PATH使って実行すべきファイルパス名を検索する。 arg0 - 実行ファイルの名前(へのポインタ)。arg0 から新プロセスイメージに渡される引数のポインタが続く。arg0 は通常 path または file と同じである。arg0 を使って自身位置知ろうとする実行ファイルもあるが、それが正しかどうか保証されない。 argv - 新プロセスイメージに渡す引数群へのポインタ配列。 envp - 環境変数群のポインタ配列。 envpの指す配列は、ヌル終端文字列へのポインタ配列であり、個々文字列次の形式である。 name=value ここで、name環境変数名、value はその変数の値である。envp 配列最後には必ずnullなければならない。envp 自体null場合は、現在の環境変数設定そのまま受け継ぐ

※この「引数」の解説は、「exec」の解説の一部です。
「引数」を含む「exec」の記事については、「exec」の概要を参照ください。

ウィキペディア小見出し辞書の「引数」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

引数

出典:『Wiktionary』 (2021/08/21 06:07 UTC 版)

この単語漢字
ひき
第二学年
すう
第二学年
湯桶読み

名詞

(ひきすう)

  1. (数学) 関数の値を決定するための変数パラメータ
  2. (情報技術) 関数メソッドモジュール等を呼び出す際に外部と値をやりとりするための変数パラメータ

発音(?)

類義語


「引数」の例文・使い方・用例・文例

  • ある関数がとることのできる引数の数
Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「引数」の関連用語

引数のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



引数のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
K-PrologK-Prolog
Copyright (C) 2025 K-Prolog All Rights Reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの引数 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのexec (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Text is available under Creative Commons Attribution-ShareAlike (CC-BY-SA) and/or GNU Free Documentation License (GFDL).
Weblioに掲載されている「Wiktionary日本語版(日本語カテゴリ)」の記事は、Wiktionaryの引数 (改訂履歴)の記事を複製、再配布したものにあたり、Creative Commons Attribution-ShareAlike (CC-BY-SA)もしくはGNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS