Content deleted Content added
Add category |
mNo edit summary |
||
Line 1:
{{Primary sources|date=September 2017}}
'''Uniform Function Call Syntax''' ('''UFCS''') or '''Uniform Calling Syntax''' ('''UCS''') or sometimes '''Universal Function Call Syntax''' is a [[programming language]] feature in [[D (programming language)|D]] and [[Nim (programming language)|Nim]] that allows any [[function (computer programming)|function]] to be called using the syntax for method calls (as in [[object-oriented programming]]), by using the [[receiver (object
== Examples ==
=== Nim programming language ===
<syntaxhighlight lang="
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)
# all the following are correct
v3 = add(v1, v2)
Line 21:
=== D programming language ===
<syntaxhighlight lang="
import std.stdio;
Line 53:
== C++ proposal ==
Proposals for a unification of member function and free function calling syntax have been discussed from the early years of [[C++]] standardization. Glassborow (2004) proposed a Uniform Calling Syntax (UCS), allowing specially annotated free functions to be called with member function notation.<ref>{{cite web|title=N1585: Uniform Calling Syntax (Re-opening public interfaces)|author=Francis Glassborow|date=2 May 2004|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1585.pdf|accessdate=17 December 2018}}</ref>
It has more recently been proposed (as of 2016) for addition to C++ by [[Bjarne Stroustrup]]<ref>{{cite web|title="UFCS proposal"|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf|format=PDF|website=Open-std.org|accessdate=1 October 2017}}</ref> and [[Herb Sutter]],<ref name="auto"/> to reduce the ambiguous decision between writing [[free function (c++)|free function]]s and member functions, to simplify the writing of [[generic programming|templated code]]. Many programmers are tempted to write member functions to get the benefits of the member function syntax (e.g. "[[dot-autocomplete]]" to list [[member function]]s);<ref>{{cite web|title=using intellisense|url=https://msdn.microsoft.com/en-us/library/hcw1s69b.aspx|website=Msdn.microsoft.com|accessdate=1 October 2017}}</ref> however, this leads to excessive [[Coupling (computer programming)|coupling]] between [[Class (computer programming)|classes]].<ref>{{cite web|title=How Non-Member Functions improve encapsulation|url=https://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197|website=Drdobbs.com|accessdate=1 October 2017}}</ref>
Line 63:
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 ==
* [[Trait (computer programming)]]
* [[Interface (computer programming)]]
Line 71:
* [[Method chaining]]
== References ==
{{Reflist}}
[[Category:Object-oriented programming]]▼
[[Category:Subroutines]]▼
[[Category:Articles with example code]]
[[Category:Articles with example D code]]
▲[[Category:Object-oriented programming]]
▲[[Category:Subroutines]]
|