Content deleted Content added
MfortyoneA (talk | contribs) ref for autocomplete issue |
MfortyoneA (talk | contribs) No edit summary |
||
Line 1:
'''Uniform Function Call Syntax''' (UFCS) or sometimes '''Universal Function Call Syntax''' is a [[programming language]] feature in [[D (programming language)|D]], [[Rust (programming language)|Rust]]<ref>https://doc.rust-lang.org/book/ufcs.html</ref> and [[Nim (programming language)|Nim]] that allows any function to be called
using the syntax for method calls (as in [[object-oriented programming]]), by using the [[receiver (object oriented programming)|receiver]] as the first parameter, and the given arguments as the remaining parameters.<ref>http://dlang.org/function.html#pseudo-member</ref> UFCS is particularly useful when function calls are chained,<ref>http://ddili.org/ders/d.en/ufcs.html</ref> behaving similar to pipes, or various dedicated operators available in functional languages for passing values through an expression. It allows free-functions to fill a role similar to [[extension method]]s in some other languages. Another benefit of the method call syntax is use with "[[dot-autocomplete]]" in [[IDE (computing)|IDE]]s, 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, aiding discoverability.
== C++ proposal ==
It has 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}}</ref> and [[Herb Sutter]]<ref>{{cite web|title="Unified Call Syntax"|url=https://isocpp.org/files/papers/N4165.pdf}}</ref>, to reduce the ambiguous decision between writing free functions and member functions<ref>{{cite web|title="How Non-Member Functions improve encapsulation|url=http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197}}</ref>, to simplify the writing of 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
== Examples ==
|