De Wikipedia, la enciclopedia libre
Ir a navegaciónSaltar a buscar

La sintaxis de llamada de función uniforme ( UFCS ) o la sintaxis de llamada uniforme ( UCS ) o, a veces, la sintaxis de llamada de función universal es una característica del lenguaje de programación en D y Nim que permite llamar a cualquier función utilizando la sintaxis para llamadas de método (como en la programación orientada a objetos ) , utilizando el receptor como primer parámetro y los argumentos dados como los parámetros restantes. [1] UFCS es particularmente útil cuando las llamadas a funciones están encadenadas [2] (comportándose de manera similar a las tuberías , o las diversasoperadores 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 los métodos de extensión en algunos otros idiomas. Otro beneficio de la sintaxis de llamada al método es el uso con " dot-autocomplete " en IDE , que usan información de tipo para mostrar una lista de funciones disponibles, dependiendo del contexto. Cuando el programador comienza con un argumento, el conjunto de funciones potencialmente aplicables se reduce en gran medida, [3] lo que ayuda a su descubrimiento.

Propuesta de C ++

Las propuestas para la unificación de la función miembro y la sintaxis de llamada de función libre se han discutido desde los primeros años de la estandarización de C ++. Glassborow (2004) propuso una sintaxis de llamada uniforme (UCS), que permite llamar a funciones libres especialmente anotadas con notación de función miembro. [4] Se ha propuesto más recientemente (a partir de 2016) para la adición a C ++ por Bjarne Stroustrup [5] y Herb Sutter , [3] para reducir la decisión ambigua entre escribir funciones libres y funciones miembro, para simplificar la escritura de plantillas codigo . Muchos programadores se sienten tentados a escribir funciones miembro para obtener los beneficios de la sintaxis de la función miembro (por ejemplo, " dot-autocomplete"para enumerar las funciones miembro ); [6] sin embargo, esto conduce a un acoplamiento excesivo entre clases . [7]

Ejemplos

Lenguaje de programación D

import  std . stdio ;int  first ( int []  arr ) {  return  arr [ 0 ]; }int []  addone ( int []  arr ) {  int []  resultado ;  foreach  ( valor ;  arr )  {  resultado  ~ =  valor  +  1 ;  }  devolver  resultado ; }void  main () {  auto  a  =  [ 0 ,  1 ,  2 ,  3 ]; // Todos los siguientes son correctos y equivalentes  int  b  =  first ( a );  int  c  =  a . primero ();  int  d  =  a . primero ; // Encadenando  int []  e  =  a . addone (). addone (); }

Lenguaje de programación Nim

type  Vector  =  tuple [ x ,  y :  int ] proc sumar ( a ,  b :  Vector ):  Vector  =  ( a . x  +  b . x ,  a . y  +  b . y ) sea  v1  =  ( x :  - 1 ,  y :  4 )  v2  =  ( x :  5 ,  y :  - 2 ) v3  =  agregar ( v1 ,  v2 )  v4  =  v1 . sume ( v2 )  v5  =  v1 . agregar ( v2 ). agregar ( v1 )

Uso de óxido del término

Hasta 2018, era común usar este término cuando se refería realmente a la sintaxis de ruta calificada / explícita y, más comúnmente, a la sintaxis de ruta completamente 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 eliminar la ambigüedad de qué rasgo se debe usar.

Las funciones miembro también se pueden usar 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 espacios de nombres), pero no usar funciones libres como métodos.

Ver también

Referencias

  1. ^ "Funciones - Lenguaje de programación D" . Dlang.org . Consultado el 1 de octubre de 2017 .
  2. ^ "Programación en D - Sintaxis de llamada de función universal (UFCS)" . Ddili.org . Consultado el 1 de octubre de 2017 .
  3. ^ a b " " Sintaxis de llamada unificada " " (PDF) . Isocpp.org . Consultado el 1 de octubre de 2017 .
  4. ^ Francis Glassborow (2 de mayo de 2004). "N1585: Uniform Calling Syntax (Reapertura de interfaces públicas)" (PDF) . Consultado el 17 de diciembre de 2018 .
  5. ^ " " Propuesta de UFCS " " (PDF) . Open-std.org . Consultado el 1 de octubre de 2017 .
  6. ^ "usando intellisense" . Msdn.microsoft.com . Consultado el 1 de octubre de 2017 .
  7. ^ "Cómo las funciones que no son miembros mejoran la encapsulación" . Drdobbs.com . Consultado el 1 de octubre de 2017 .