Uniform Function Call Syntax

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 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 classes.

Examples

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

References


This article is issued from Wikipedia - version of the Friday, April 22, 2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.