Uniform function call syntax
Uniform function call syntax or uniform call syntax is a programming language feature in D, Nim, Koka,, Effekt, and Lean 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. The same technique is used in the AviSynth scripting language under the name "OOP notation".
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 syntax is related to completion systems 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.
Examples
D programming language
int first
int addone
void main
Nim programming language
type Vector = tuple
proc add: Vector =
let
v1 =
v2 =
# all the following are correct
v3 = add
v4 = v1.add
v5 = v1.add.add
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.In 2016 it was proposed a second time 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. This was again, in 2023, proposed by Herb Sutter claiming new information and insights, as well as an experimental implementation in the cppfront compiler.