Uniform Function Call Syntaxとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > Uniform Function Call Syntaxの意味・解説 

Uniform Function Call Syntax

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/09/15 09:22 UTC 版)

Uniform Function Call SyntaxUFCS)またはUniform Calling SyntaxUCS)、Universal Function Call Syntaxは、オブジェクト指向プログラミング言語にみられるメソッド呼び出し構文を利用して、任意の関数を呼び出すことができる機能である。関数の第一引数をレシーバーとして使用し、残りの引数をメソッドの引数として使用する[1]D言語[2]Nim[3]、Koka[4]、Effekt[5]などのプログラミング言語でUFCSが採用されている。同様の手法が、AviSynthスクリプト言語において「OOP notation(OOP記述法)」という名前で用いられている[6]

UFCSは、関数呼び出しがチェインされている場合に特に有用である[2](パイプ、または一連のを介して値を渡すために関数型言語で使用できるさまざまな専用演算子に類似している)。これにより、フリー関数(非メンバ関数)が他言語における拡張メソッドと同様の役割を果たすことができる。メソッド呼び出し構文のもう一つの利点としては、 IDEの補完機能が使えることが挙げられる。補完機能は、型情報を使用して、コンテキストに応じて使用可能な関数の一覧を表示する。プログラマーが引数を入力すると、使用できる可能性のある関数が大幅に絞り込まれ[7]、関数の発見可能性英語版が向上する。

D言語

int first(int[] arr)
{
    return arr[0];
}

int[] addone(int[] arr)
{
    int[] result;
    foreach (value; arr) {
        result ~= value + 1;
    }
    return result;
}

void main()
{
    auto a = [0, 1, 2, 3];

    // 以下のコードはいずれも等価であり、正しい
    int b = first(a);
    int c = a.first;

    // メソッドチェーン
    int[] e = a.addone().addone();
}

Nim

type Vector = tuple[x, y: int]

proc add(a, b: Vector): Vector =
  (a.x + b.x, a.y + b.y)

let
  v1 = (x: -1, y: 4)
  v2 = (x: 5, y: -2)

  # 以下のコードは全て正しい
  v3 = add(v1, v2)
  v4 = v1.add(v2)
  v5 = v1.add(v2).add(v4)

C++ における提案

メンバ関数とフリー関数の呼び出し構文を統合する提案は、C++標準化の初期から議論されてきた。 Glassborow(2004)は、特別に注釈が付けられたフリー関数をメンバ関数表記で呼び出すことができるUniform Calling Syntax(UCS)を提案した[8]。2016年には、 Bjarne Stroustrup[9]とHerb Sutter[7]によって、フリー関数とメンバ関数の記述間の曖昧な決定を減らし、テンプレートコードの記述を簡素化するために、C++への追加が再び提案された。多くのプログラマーは、メンバ関数構文の利点(メンバ関数をリスト化するための「ドットオートコンプリート」など)を得るためにメンバ関数を作成しようとする[10]。しかし、これはクラス間の過度の結合につながる[11]。2023年には再びHerb Sutterによって提案され[12]、新しい情報と洞察、そしてcppfrontコンパイラでの実験的な実装が主張されている。

Rust における用語の利用

2018年頃までは、UFCSという用語は修飾/明示的パス構文、特に完全修飾パス構文を指すことが一般的だった[13]。同じ構造体に同じメソッドを定義する複数のトレイトが存在する可能性があるため、どのトレイトを利用するかを曖昧にしない仕組みが必要であったことが理由である。メンバ関数は、修飾パス(名前空間付きのパス)を通してフリー関数として利用できる。この機能はメソッドを(名前空間付きの)フリー関数として使えるようにしているが、フリー関数をメソッドとして使えるようにはしない。そのため、UFCSという用語はこの用途に対しては不適切である。

参照

参考文献

  1. ^ Functions - D Programming Language”. Dlang.org. 2017年10月1日閲覧。
  2. ^ a b Programming in D - Universal Function Call Syntax (UFCS)”. Ddili.org. 2017年10月1日閲覧。
  3. ^ Nim by Example - Procs”. nim-by-example.github.io. 2024年5月19日閲覧。
  4. ^ The Koka Programming Language”. koka-lang.github.io. 2024年5月19日閲覧。
  5. ^ Effekt Language: Introduction to Effekt”. Effekt Language. 2024年5月19日閲覧。
  6. ^ Operators - Avisynth wiki”. 2024年9月15日閲覧。 “a.function(b) is equivalent to function(a, b)
  7. ^ a b "Unified Call Syntax"”. Isocpp.org. 2017年10月1日閲覧。
  8. ^ Francis Glassborow (2 May 2004). “N1585: Uniform Calling Syntax (Re-opening public interfaces)”. 17 December 2018閲覧。
  9. ^ "UFCS proposal"”. Open-std.org. 2017年10月1日閲覧。
  10. ^ using intellisense”. Msdn.microsoft.com. 2017年10月1日閲覧。
  11. ^ How Non-Member Functions improve encapsulation”. Drdobbs.com. 2017年10月1日閲覧。
  12. ^ Sutter, Herb. “Unified function call syntax (UFCS)”. 2023年10月13日閲覧。
  13. ^ Rename UFCS to accurately reflect its functionality. · Issue #1140 · rust-lang/rfcs” (英語). GitHub. 2024年5月19日閲覧。



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  
  •  Uniform Function Call Syntaxのページへのリンク

辞書ショートカット

すべての辞書の索引

「Uniform Function Call Syntax」の関連用語

Uniform Function Call Syntaxのお隣キーワード
検索ランキング

   

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



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

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのUniform Function Call Syntax (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS