Uniform Function Call Syntax


Uniform Function Call Syntax or Uniform Calling Syntax or sometimes Universal Function Call Syntax is a programming language feature in D and Nim that allows any function to be called using the syntax for method calls, by using the receiver as the first parameter, and the given arguments as the remaining parameters. UFCS is particularly useful when function calls are chained. It allows free-functions to fill 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, 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

Proposals for a unification of member function and free function calling syntax have been discussed from the early years of C++ standardization. Glassborow proposed a Uniform Calling Syntax, allowing specially annotated free functions to be called with member function notation.
It has more recently been proposed 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 between classes.

Examples

D programming language


import std.stdio;
int first
int addone
void main

Nim programming language


type Vector = tuple
proc add: Vector =

let
v1 =
v2 =
v3 = add
v4 = v1.add
v5 = v1.add.add

Rust usage of the term

Until 2018 it was common to use this term when actually referring to and most commonly the .: because it's 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 path.
The term UFCS is incorrect for these uses, as it allows using methods as free functions, but not using free functions as methods.