Svoboda | Graniru | BBC Russia | Golosameriki | Facebook

To install click the Add extension button. That's it.

The source code for the WIKI 2 extension is being checked by specialists of the Mozilla Foundation, Google, and Apple. You could also do it yourself at any point in time.

4,5
Kelly Slayton
Congratulations on this excellent venture… what a great idea!
Alexander Grigorievskiy
I use WIKI 2 every day and almost forgot how the original Wikipedia looks like.
Live Statistics
English Articles
Improved in 24 Hours
Added in 24 Hours
Languages
Recent
Show all languages
What we do. Every page goes through several hundred of perfecting techniques; in live mode. Quite the same Wikipedia. Just better.
.
Leo
Newton
Brights
Milds

Uniform Function Call Syntax

From Wikipedia, the free encyclopedia

Uniform Function Call Syntax (UFCS) or Uniform Call Syntax (UCS) or sometimes Universal Function Call Syntax is a programming language feature in D,[1] Nim,[2] Koka,[3] and Effekt[4] 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.[5] The same technique is used in the AviSynth scripting language under the name "OOP notation".[6]

UFCS is particularly useful when function calls are chained[1] (behaving similar to pipes, or the various dedicated operators available in functional languages for passing values through a series of expressions). 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,[7] aiding discoverability.

YouTube Encyclopedic

  • 1/3
    Views:
    126 477
    353
    4 568
  • C Programming Tutorial - 38 - Random Number Generator with rand
  • [Mathematical Linguistics] Tree Adjoining Grammar
  • ٨٤ - التعرف على Resource Reference Syntax الجزء الثاني

Transcription

Examples

D programming language

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 following are correct and equivalent
    int b = first(a);
    int c = a.first;

    // chaining
    int[] e = a.addone().addone();
}

Nim programming language

type Vector = tuple[x, y: int]

proc add(a, b: Vector): Vector =
  (a.x + b.x, a.y + b.y)

let
  v1 = (x: -1, y: 4)
  v2 = (x: 5, y: -2)

  # all the following are correct
  v3 = add(v1, v2)
  v4 = v1.add(v2)
  v5 = v1.add(v2).add(v4)

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 (2004) proposed a Uniform Calling Syntax (UCS), allowing specially annotated free functions to be called with member function notation.[8] In 2016 it has been proposed a second time for addition to C++ by Bjarne Stroustrup[9] and Herb Sutter,[7] 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 (e.g. "dot-autocomplete" to list member functions);[10] however, this leads to excessive coupling between classes.[11] This has again, in 2023, been proposed by Herb Sutter[12] claiming new information and insights as well as an experimental implementation in the cppfront compiler.

Rust usage of the term

Until 2018, it was common[13] to use this term when actually referring to qualified/explicit path syntax and most commonly the Fully Qualified Path syntax: because it is 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 (namespaced) path. The term UFCS is incorrect for these uses, as it allows using methods as (namespaced) free functions, but not using free functions as methods.

See also

References

  1. ^ a b "Programming in D - Universal Function Call Syntax (UFCS)". Ddili.org. Retrieved 1 October 2017.
  2. ^ "Nim by Example - Procs". nim-by-example.github.io. Retrieved 2024-05-19.
  3. ^ "The Koka Programming Language". koka-lang.github.io. Retrieved 2024-05-19.
  4. ^ "Effekt Language: Introduction to Effekt". Effekt Language. Retrieved 2024-05-19.
  5. ^ "Functions - D Programming Language". Dlang.org. Retrieved 1 October 2017.
  6. ^ "Operators - Avisynth wiki". a.function(b) is equivalent to function(a, b)
  7. ^ a b ""Unified Call Syntax"" (PDF). Isocpp.org. Retrieved 1 October 2017.
  8. ^ Francis Glassborow (2 May 2004). "N1585: Uniform Calling Syntax (Re-opening public interfaces)" (PDF). Retrieved 17 December 2018.
  9. ^ ""UFCS proposal"" (PDF). Open-std.org. Retrieved 1 October 2017.
  10. ^ "using intellisense". Msdn.microsoft.com. Retrieved 1 October 2017.
  11. ^ "How Non-Member Functions improve encapsulation". Drdobbs.com. Retrieved 1 October 2017.
  12. ^ Sutter, Herb (13 October 2023). "Unified function call syntax (UFCS)" (PDF).
  13. ^ "Rename UFCS to accurately reflect its functionality. · Issue #1140 · rust-lang/rfcs". GitHub. Retrieved 2024-05-19.
This page was last edited on 11 June 2024, at 14:58
Basis of this page is in Wikipedia. Text is available under the CC BY-SA 3.0 Unported License. Non-text media are available under their specified licenses. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc. WIKI 2 is an independent company and has no affiliation with Wikimedia Foundation.