Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Uniform function call syntax

From Wikipedia, the free encyclopedia
Programming language feature

Uniform function call syntax (UFCS) oruniform call syntax (UCS) is aprogramming language feature inD,[1]Nim,[2] Koka,[3], Effekt[4], and Lean[5] that allows anyfunction to be called using the syntax for method calls (as inobject-oriented programming), by using the receiver as the first parameter and the given arguments as the remaining parameters.[6] The same technique is used in theAviSynth scripting language under the name "OOP notation".[7]

UFCS is particularly useful when function calls are chained[1] (behaving similar topipes, or the various dedicatedoperators available infunctional languages for passing values through a series ofexpressions). It allows free functions to fill a role similar toextension methods in some other languages. Another benefit of the syntax is related to completion systems inIDEs, which use type information to show a list of available functions, dependent on the context. When the programmer starts with an argument, the set of potentially applicable functions is greatly narrowed down,[8] aidingdiscoverability.

Examples

[edit]

D programming language

[edit]
intfirst(int[]arr){returnarr[0];}int[]addone(int[]arr){int[]result;foreach(value;arr){result~=value+1;}returnresult;}voidmain(){autoa=[0,1,2,3];// all the following are correct and equivalentintb=first(a);intc=a.first();// chainingint[]e=a.addone().addone();}

Nim programming language

[edit]
typeVector=tuple[x,y:int]procadd(a,b:Vector):Vector=(a.x+b.x,a.y+b.y)letv1=(x:-1,y:4)v2=(x:5,y:-2)# all the following are correctv3=add(v1,v2)v4=v1.add(v2)v5=v1.add(v2).add(v4)

C++ proposal

[edit]

Proposals for a unification of member function and free function calling syntax have been discussed from the early years ofC++ standardization. Glassborow (2004) proposed a uniform calling syntax (UCS), allowing specially annotated free functions to be called with member function notation.[9]In 2016 it was proposed a second time for addition to C++ byBjarne Stroustrup[10] andHerb Sutter,[8] to reduce the ambiguous decision between writingfree functions and member functions, to simplify the writing oftemplated code. Many programmers are tempted to write member functions to get the benefits of the member function syntax (e.g. "dot-autocomplete" to listmember functions);[11] however, this leads to excessivecoupling betweenclasses.[12] This was again, in 2023, proposed by Herb Sutter[13] claiming new information and insights, as well as an experimental implementation in thecppfront compiler.

Rust usage of the term

[edit]

Until 2018, it was common[14] to use this term when actually referring toqualified/explicit path syntax and most commonly thefully qualified path syntax: because it is possible to have several traits defining the same method implemented on the same struct, a mechanism is needed to disambiguate which trait should be used. Member functions can also be used as free functions through a qualified (namespaced) path. The term UFCS is incorrect for these uses, as it allows using methods as (namespaced) free functions, but not using free functions as methods.

See also

[edit]

References

[edit]
  1. ^ab"Universal Function Call Syntax (UFCS)".Programming in D. Retrieved1 October 2017.
  2. ^"Nim by Example - Procs".nim-by-example.github.io. Retrieved2024-05-19.
  3. ^"The Koka Programming Language".koka-lang.github.io. Retrieved2024-05-19.
  4. ^"Functions".Effekt Language. Retrieved2025-04-09.
  5. ^"Structures".Functional Programming in Lean. Retrieved2025-12-09.
  6. ^"Functions".D Programming Language. Retrieved1 October 2017.
  7. ^"Operators".Avisynth wiki.a.function(b) is equivalent tofunction(a, b)
  8. ^ab"Unified Call Syntax"(PDF).Isocpp.org. Retrieved1 October 2017.
  9. ^Francis Glassborow (2 May 2004)."N1585: Uniform Calling Syntax (Re-opening public interfaces)"(PDF). Retrieved17 December 2018.
  10. ^"UFCS proposal"(PDF).Open-std.org. Retrieved1 October 2017.
  11. ^"Using IntelliSense".MSDN. Retrieved1 October 2017.
  12. ^"How Non-Member Functions Improve Encapsulation".Drdobbs.com. Retrieved1 October 2017.
  13. ^Sutter, Herb (13 October 2023)."Unified function call syntax (UFCS)"(PDF).
  14. ^"Rename UFCS to accurately reflect its functionality. · Issue #1140 · rust-lang/rfcs".GitHub. Retrieved2024-05-19.
Imperative
Structured
Object-oriented
Declarative
Functional
Dataflow
Logic
Domain-
specific
language

(DSL)
Concurrent,
parallel
Metaprogramming
Separation
of concerns
Comparisons/Lists
Retrieved from "https://en.wikipedia.org/w/index.php?title=Uniform_function_call_syntax&oldid=1334672719"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp