Uniform function call syntax: Difference between revisions

Content deleted Content added
Ilyash-b (talk | contribs)
Add Next Generation Shell example
Reverted good faith edits by Ilyash-b (talk) (TW)
Line 1:
{{Primary sources|date=September 2017}}
'''Uniform Function Call Syntax''' ('''UFCS''') or '''Uniform Calling Syntax''' ('''UCS''') or sometimes '''Universal Function Call Syntax''' is a [[programming language]] feature in [[D (programming language)|D]], and [[Nim (programming language)|Nim]], and [[Next Generation Shell]] that allows any [[function (computer programming)|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>{{cite web|url=http://dlang.org/function.html#pseudo-member|title=Functions - D Programming Language|website=Dlang.org|accessdate=1 October 2017}}</ref> UFCS is particularly useful when function calls are chained<ref>{{cite web|url=http://ddili.org/ders/d.en/ufcs.html|title=Programming in D - Universal Function Call Syntax (UFCS)|website=Ddili.org|accessdate=1 October 2017}}</ref> (behaving similar to [[Pipe (computer science)|pipe]]s, or the various dedicated [[Operator (computer programming)|operator]]s available in [[functional language]]s for passing values through a series of [[Expression (computer science)|expression]]s). 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,<ref name="auto">{{cite web|title="Unified Call Syntax"|url=https://isocpp.org/files/papers/N4165.pdf|format=PDF|website=Isocpp.org|accessdate=1 October 2017}}</ref> aiding discoverability.
 
== C++ proposal ==
Line 53:
v4 = v1.add(v2)
v5 = v1.add(v2).add(v1)
</source>
 
=== Next Generation Shell programming language ===
<source>
F addone(a:Arr) a.map(F(x) x + 1)
 
[0, 1, 2, 3].addone().addone().echo()
 
# Output: [2,3,4,5]
</source>