名前付きパラメーター

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータープログラミングでは名前付きパラメーター名前付き引数、またはキーワード引数は、関数呼び出し内の各パラメーターの名前を明確に示す、コンピューター言語による関数呼び出しのサポートを指します。

概要

名前付きパラメーターを使用する関数呼び出しは、値の順序付きリストを提供するのではなく、それぞれをパラメーター名に関連付けることによって値が渡されるという点で、通常の関数呼び出しとは異なります。

たとえば、名前付きパラメーターを使用しないこのJavaまたはC#メソッド呼び出し について考えてみます。

ウィンドウaddNewControl "タイトル"  20、50、100、50  true ; _ _  _  

Pythonで名前付きパラメーターを使用すると、呼び出しは次のように記述できます。

ウィンドウaddNewControl title = "Title" 
                     xPosition = 20 
                     yPosition = 50 
                     width = 100 
                     height = 50 
                     drawingNow = True 

PHPで名前付きパラメーターを使用すると、呼び出しは次のように記述できます。

$ window- > addNewControl title  "Title" 
                       xPosition  20 
                       yPosition  50 
                       width  100 
                       height  50 
                       drawingNow  True );

位置引数のあるバージョンは、より暗黙的です。名前付き引数を持つバージョンは、より明示的です。特定のインスタンスに応じて、プログラマーはどちらか一方が読みやすいと感じる場合があります。

プログラミング言語での使用

名前付きパラメーターは、多くの言語で明示的にサポートされています。例の網羅的ではない選択には、Ada[1] C#4.0 + 、[2] Ceylon [引用が必要]ColdFusion Markup Language(CFML)[引用が必要]Common Lisp[3] Fortran [引用が必要]IDLが含まれます。 [引用が必要]Kotlin[4] Mathematica [引用が必要]PL / SQL [引用が必要]PowerShell[要出典]Python[5] R[6] PHP[7] Ruby[8] Scala[9] Smalltalk[要出典]Swift[10]およびVisualBasic[11]Objective-Cには名前付きパラメーターがないこと注意して[12]

パラメータの順序

名前付きパラメーターのない言語では、関数呼び出しのパラメーターの順序は必然的に固定されます。これは、言語がどの値をどの目的で使用するかを識別できる唯一の方法だからです。

名前付きパラメーターを使用すると、各値に付けられた名前がその目的を識別するため、通常、任意の順序で値を指定できます。これにより、プログラムの各部分間の接続が減りますいくつかの言語は名前付きパラメーターを使用しますが、それでもパラメーターを特定の順序で提供する必要があります。

オプションのパラメータと位置パラメータ

名前付きパラメーターは、多くの場合、オプションのパラメーターと組み合わせて使用​​されます。名前付きパラメーターがない場合、どの値が省略されているかを判別する他の方法がないため、オプションのパラメーターはパラメーターリストの最後にのみ表示できます。ただし、名前付きオプションパラメータをサポートする言語では、プログラムは使用可能なパラメータのサブセットを提供する場合があり、名前は提供された値を決定するために使用されます。

オプションの名前付きパラメーターと部分適用の両方をサポートするOCamlなどの言語では、さらに複雑になります一般に、部分的に適用された関数と、パラメーターのサブセットが提供された関数を区別することはできません。OCamlは、すべてのオプションの名前付きパラメーターの後に位置パラメーターを要求することにより、このあいまいさを解決します。その存在または不在は、関数が完全にまたは部分的に適用されたかどうかを判断するために使用されます。すべてのパラメーターがオプションの場合、実装者は、タイプunitのダミーの位置パラメーターを追加することで問題を解決できます。

MediaWikiでは{{{1}}}、テンプレートなどのコード(変数)は、1番目、2番目などの名前のないパラメーター(または、などの名前のパラメーターの値){{{2}}}置き換えられます。これらは位置パラメータとして知られています。12

エミュレート

名前付きパラメーターのない言語では、同じ利点のいくつかを他の方法で実現できます。

ドキュメント付き

ドキュメントとしてのそれらの価値は、 Javaなどの言語の統合開発環境(IDE)のツールチップ、またはコメント(Cで複製できます。

MyFunctionCall 
    20 / * x座標* /  
    50 / * y座標* /  
    100 / *幅* / 
    5 / *高さ* /   
    TRUE / *今すぐ描画しますか?* / 
);

しかし、これはチェックを提供せず、引数の順序は依然として重要です。

データ構造付き

引数の順序の制限を取り除き、一部の値を指定しないままにする機能は、レコードまたは連想配列を渡すことで実現できます。

たとえば、JavaScriptでは、これら2つの呼び出しは同等です。

MyFunctionCall ({  xPosition  20  yPosition  50  width  100  height  5 
                 drawingNow  true  });
MyFunctionCall ({  100  高さ 5  xPosition  20  yPosition  50 
                 drawingNow  true  });

C99との比較:[13]

struct  MyParam { 
    int xPosition ; 
    int yPosition ; 
    int; 
    intの高さ; 
    unsigned char drawingNow ;  
};

MyParamパラメータ= { xPosition = 20 yPosition = 50          
        = 100 高さ= 5 drawingNow = TRUE };          
MyFunctionCall parameters );

特別サポート

Perlおよび2.0より前のRubyには、同様の規則が存在し(一般にハッシュまたはオプションハッシュ[14]と呼ばれます)、関数呼び出し内の区切り文字を省略するための特別なサポートがあります。例として、コアモジュールのNet :: FTP new関数は、オプションの引数のハッシュを受け入れます。[15]

連鎖メソッド呼び出しを使用する

オブジェクト指向プログラミング言語では、流暢なインターフェースの形式として、メソッドチェーンを使用名前付きパラメーターをシミュレートすることができます。名前付きの各パラメーターは、オブジェクトを変更して返すパラメーターオブジェクトのメソッドに置き換えられます。C ++では、これは名前付きパラメーターイディオムと呼ばれます。[16]次に、オブジェクトは、それに含まれるパラメーターを使用する関数に渡されます。

メソッドチェーンは、ビルダークラスによって提供されるデフォルト値をオーバーライドする方法として 、ビルダーパターンと組み合わせて使用​​されることがよくあります。

も参照してください

参考文献

  1. ^ Adaプログラミング言語のリファレンスマニュアルアメリカ合衆国国防総省。1983年。
  2. ^ ビルワーグナー。「名前付きおよびオプションの引数-C#プログラミングガイド」docs.microsoft.com(アメリカ英語)2021-06-16を取得
  3. ^ 「関数」lispcookbook.github.io 2021年10月28日取得
  4. ^ 「関数| Kotlin」Kotlinヘルプ(アメリカ英語)2021-06-16を取得
  5. ^ 「8。複合ステートメント」docs.python.org 2021年10月28日取得
  6. ^ 「10.3名前付き引数とデフォルト」Rの紹介2021年10月28日取得
  7. ^ 「PHP:関数の引数-手動」www.php.net 2021-06-16を取得
  8. ^ 「Ruby2キーワード引数」Thoughtbot.com2014年7月21日2021年10月28日取得
  9. ^ 「名前付き引数」Scalaドキュメント2021-06-16を取得
  10. ^ 「関数— Swiftプログラミング言語(Swift 5.1)」docs.swift.org 2020年1月27日取得
  11. ^ キャスリーンドラード。「位置と名前による引数の受け渡し-VisualBasic」docs.microsoft.com(アメリカ英語)2021-06-16を取得
  12. ^ 開発者ライブラリ-クラスの実装はその内部動作を提供します
  13. ^ 「指定された初期化(GNUコンパイラコレクション(GCC)を使用)」
  14. ^ Perl 2.9のプログラミング:ハッシュ
  15. ^ PerlコアモジュールNet :: FTP
  16. ^ C ++ FAQ、 10.20「名前付きパラメータイディオム」とは何ですか?

外部リンク