Uniform Function Call Syntax: Difference between revisions
CyberShadow (talk | contribs) m →C++ proposal: Shorten link |
|||
Line 3: | Line 3: | ||
== C++ proposal == |
== 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]], to reduce the ambiguous decision between writing free functions and member functions, to simplify the writing of templated code. Many programmers are tempted to write member-functions to get the benefits of the member-function syntax, however this leads to excessive [[Coupling (computer programming)]] between [[Class (computer programming)|classes]]. |
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]], to reduce the ambiguous decision between writing free functions and member functions, to simplify the writing of templated code. Many programmers are tempted to write member-functions to get the benefits of the member-function syntax, however this leads to excessive [[Coupling (computer programming)|coupling]] between [[Class (computer programming)|classes]]. |
||
== Examples == |
== Examples == |
Revision as of 12:57, 17 June 2016
Uniform Function Call Syntax (UFCS) is a programming language feature in D that allows any function to be called using the syntax for method calls (as in Object-oriented programming), by using the receiver as the first parameter, and the given arguments as the remaining parameters.[1] UFCS is particularly useful when function calls are chained.,[2] behaving similar to pipes, or various dedicated operators available in functional languages for passing values through an expression. It allows free-functions to fills a role similar to extension methods in some other languages. Another benefit of the method call syntax is use with 'dot-autocomplete' in IDEs, which use type information to show a list of available functions, dependant 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[3] and Herb Sutter, to reduce the ambiguous decision between writing free functions and member functions, to simplify the writing of templated code. Many programmers are tempted to write member-functions to get the benefits of the member-function syntax, however this leads to excessive coupling between classes.
Examples
D programming language
import std.stdio;
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];
// All the followings are correct and equivalent
int b = first(a);
int c = a.first();
int d = a.first;
// Chaining
int[] e = a.addone().addone();
}
See also
- trait (computer programming)
- interface (computer programming)
- go (programming language), another language with a more open philosophy to methods
- Loose coupling
- Duck typing
References