Articulo de referencia

Sintaxis uniforme para llamadas a funciones

La sintaxis uniforme de llamada a función ( UFCS ) o sintaxis uniforme de llamada ( UCS ) es una característica del lenguaje de programación en D , [ 1 ] Nim , [ 2 ] Koka, [ 3 ]...

La sintaxis uniforme de llamada a función ( UFCS ) o sintaxis uniforme de llamada ( UCS ) es una característica del lenguaje de programación en D , [ 1 ] Nim , [ 2 ] Koka, [ 3 ] Effekt, [ 4 ] Lean [ 5 ] y otros lenguajes de programación, que permite llamar a cualquier función utilizando la sintaxis de llamadas a métodos (como en la programación orientada a objetos ), usando el receptor como primer parámetro y los argumentos dados como parámetros restantes. [ 6 ] La misma técnica se utiliza en el lenguaje de scripting AviSynth bajo el nombre de "notación OOP". [ 7 ]

UFCS es particularmente útil cuando se encadenan llamadas a funciones [ 1 ] (comportándose de manera similar a las tuberías o a los diversos operadores dedicados disponibles en lenguajes funcionales para pasar valores a través de una serie de expresiones ). Permite que las funciones libres cumplan una función similar a la de los métodos de extensión en otros lenguajes. Otro beneficio de la sintaxis está relacionado con los sistemas de autocompletado en los IDE , que utilizan información de tipo para mostrar una lista de funciones disponibles, según el contexto. Cuando el programador comienza con un argumento, el conjunto de funciones potencialmente aplicables se reduce considerablemente [ 8 ] , lo que facilita su descubrimiento .

Ejemplos

lenguaje de programación D

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 ];// Todas las siguientes son correctas y equivalentes int b = first ( a ); int c = a . first ();// encadenamiento int [] e = a . complemento (). complemento (); }

Lenguaje de programación Nim

tipo Vector = tupla [ x , y : int ]proc add ( a , b : Vector ): Vector = ( a . x + b . x , a . y + b . y )Sea v1 = ( x : - 1 , y : 4 ) v2 = ( x : 5 , y : - 2 )# Todas las siguientes son correctas v3 = add ( v1 , v2 ) v4 = v1.add ( v2 ) v5 = v1.add ( v2 ) .add ( v4 )

Propuesta de C++

Desde los primeros años de la estandarización de C++ se han discutido propuestas para unificar la sintaxis de llamada de funciones miembro y funciones libres . Glassborow (2004) propuso una sintaxis de llamada uniforme (UCS), que permite llamar a funciones libres especialmente anotadas con notación de función miembro. [ 9 ] En 2016 , Bjarne Stroustrup [ 10 ] y Herb Sutter [ 8 ] propusieron por segunda vez su adición a C++ para reducir la decisión ambigua entre escribir funciones libres y funciones miembro, y simplificar la escritura de código con plantillas . Muchos programadores se ven tentados a escribir funciones miembro para obtener los beneficios de la sintaxis de función miembro (por ejemplo, " autocompletar con punto " para listar funciones miembro ); [ 11 ] sin embargo, esto conduce a un acoplamiento excesivo entre clases . [ 12 ] Esto fue nuevamente propuesto, en 2023, por Herb Sutter [ 13 ] afirmando nueva información y perspectivas, así como una implementación experimental en el compilador cppfront .

Uso del término en Rust

Hasta 2018, era común [ 14 ] usar este término cuando en realidad se refería a la sintaxis de ruta calificada/explícita y más comúnmente a la sintaxis de ruta totalmente calificada : debido a que es posible tener varios rasgos que definen el mismo método implementado en la misma estructura, se necesita un mecanismo para desambiguar qué rasgo debe usarse. Las funciones miembro también pueden usarse como funciones libres a través de una ruta calificada (con espacio de nombres). El término UFCS es incorrecto para estos usos, ya que permite usar métodos como funciones libres (con espacio de nombres), pero no usar funciones libres como métodos.

Véase también

Referencias

  1. 1 2 "Sintaxis de llamada a función universal (UFCS)" . Programación en D. Consultado el 1 de octubre de 2017 .
  2. "Nim by Example - Procs" . nim-by-example.github.io . Consultado el 19 de mayo de 2024 .
  3. "El lenguaje de programación Koka" . koka-lang.github.io . Consultado el 19 de mayo de 2024 .
  4. "Funciones" . Effekt Language . Consultado el 9 de abril de 2025 .
  5. "Estructuras" . Programación funcional en Lean . Consultado el 09/12/2025 .
  6. "Funciones" . Lenguaje de programación D. Consultado el 1 de octubre de 2017 .
  7. "Operadores" . Wiki de Avisynth . es equivalente aa.function(b)function(a, b)
  8. 1 2 "Sintaxis de llamada unificada" (PDF) . Isocpp.org . Consultado el 1 de octubre de 2017 .
  9. Francis Glassborow (2 de mayo de 2004). "N1585: Sintaxis de llamada uniforme (reapertura de interfaces públicas)" (PDF) . Consultado el 17 de diciembre de 2018 .
  10. "Propuesta UFCS" (PDF) . Open-std.org . Consultado el 1 de octubre de 2017 .
  11. "Uso de IntelliSense" . MSDN . Consultado el 1 de octubre de 2017 .
  12. "Cómo las funciones que no son miembros mejoran la encapsulación" . Drdobbs.com . Consultado el 1 de octubre de 2017 .
  13. Sutter, Herb (13 de octubre de 2023). "Sintaxis unificada de llamadas a funciones (UFCS)" (PDF) .
  14. "Cambiar el nombre de UFCS para que refleje con precisión su funcionalidad. · Problema n.º 1140 · rust-lang/rfcs" . GitHub . Consultado el 19 de mayo de 2024 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Uniform_function_call_syntax&oldid=1356535537 "