Articulo de referencia

Parámetro con nombre

En programación informática , los parámetros con nombre , los argumentos con nombre o los argumentos con nombre se refieren al soporte que ofrece un lenguaje de programación par...

En programación informática , los parámetros con nombre , los argumentos con nombre o los argumentos con nombre se refieren al soporte que ofrece un lenguaje de programación para que las llamadas a funciones asocien claramente cada argumento con un parámetro determinado dentro de la llamada a la función.

Descripción general

Una llamada a una función que utiliza parámetros con nombre se diferencia de una llamada a una función normal en que los argumentos se pasan asociando cada uno con un nombre de parámetro, en lugar de proporcionar una lista ordenada de argumentos.

Por ejemplo, considere esta llamada a un método de Java o C# que no utiliza parámetros con nombre:

ventana.addNewControl ( " Título" , 20 , 50 , 100 , 50 , true ) ;

Utilizando parámetros con nombre en Python , la llamada se puede escribir como:

ventana.add_new_control ( título = " Título " , posición_x = 20 , posición_y = 50 , ancho = 100 , alto = 50 , dibujo_ahora = Verdadero )

Utilizando parámetros con nombre en PHP , la llamada se puede escribir como:

$window -> addNewControl ( title : "Título" , xPosition : 20 , yPosition : 50 , width : 100 , height : 50 , drawingNow : true );

La versión con argumentos posicionales es más implícita. Las versiones que nombran parámetros son más explícitas. Según las circunstancias, un programador puede encontrar una u otra más fácil de leer.

Uso en lenguajes de programación

Muchos lenguajes admiten explícitamente parámetros con nombre. Una selección no exhaustiva de ejemplos incluye Ada , [ 1 ] C# 4.0+ , [ 2 ] Ceylon , ColdFusion Markup Language (CFML) , Common Lisp , [ 3 ] Fortran , IDL , Kotlin , [ 4 ] Mathematica , Nim , [ 5 ] PL/SQL , PowerShell , Python , [ 6 ] R , [ 7 ] PHP , [ 8 ] Ruby , [ 9 ] Scala , [ 10 ] Smalltalk , Swift [ 11 ] y Visual Basic . [ 12 ] Objective-C no tiene parámetros con nombre (aunque partes del nombre del método puedan parecer parámetros con nombre). [ 13 ] En C++ , se pueden lograr parámetros con nombre utilizando inicializadores designados desde C++20 , [ 14 ] de la siguiente manera:

struct A { int a {}, int b {} };void foo ( A bar ) { std :: println ( "Aa = {}, Ab = {}" , bar . a , bar . b ); } foo ({ . a = 1 , . b = 3 });

Orden de los parámetros

En los lenguajes que no admiten parámetros con nombre, el orden de los argumentos en una llamada a una función es necesariamente fijo, ya que es la única manera en que el lenguaje puede identificar qué argumento se pretende utilizar para cada parámetro.

Con los parámetros con nombre, generalmente es posible proporcionar los argumentos en cualquier orden, ya que el nombre del parámetro asociado a cada argumento identifica su función. Esto reduce la complejidad entre las distintas partes del programa. Algunos lenguajes admiten parámetros con nombre, pero aun así requieren que los argumentos se proporcionen en un orden específico.

Parámetros opcionales y parámetros de posición

Los parámetros con nombre se suelen usar junto con los parámetros opcionales. Sin parámetros con nombre, los parámetros opcionales solo pueden aparecer al final de la lista de parámetros, ya que no hay otra forma de determinar qué valores se han omitido. Sin embargo, en los lenguajes que admiten parámetros opcionales con nombre, los programas pueden proporcionar cualquier subconjunto de los parámetros disponibles, y los nombres se utilizan para determinar qué valores se han proporcionado.

En lenguajes como OCaml, que admiten parámetros con nombre opcionales y aplicación parcial , surge una complicación adicional . En general, es imposible distinguir entre una función aplicada parcialmente y una función a la que se le ha proporcionado un subconjunto de parámetros. OCaml resuelve esta ambigüedad exigiendo un argumento posicional después de todos los argumentos de parámetros con nombre opcionales: su presencia o ausencia se utiliza para decidir si la función se ha aplicado total o parcialmente. Si todos los parámetros son opcionales, el implementador puede resolver el problema añadiendo un parámetro posicional ficticio de tipo unidad .

Emulando

En los lenguajes que no admiten parámetros con nombre, algunos de los mismos beneficios pueden lograrse de otras maneras.

Con documentación

Su valor como documentación puede replicarse mediante información sobre herramientas en entornos de desarrollo integrados (IDE) para lenguajes como Java , o con comentarios (en C ):

MyFunctionCall ( 20 , /* coordenada x */ 50 , /* coordenada y */ 100 , /* ancho */ 5 , /* alto */ TRUE /* ¿dibujando ahora? */ );

Estos comentarios no se revisan para comprobar su veracidad y el orden de los argumentos sigue siendo importante.

Con estructuras de datos

La eliminación de la restricción del orden de los argumentos y la posibilidad de dejar algunos valores sin especificar se puede lograr pasando un registro o una matriz asociativa .

Por ejemplo, en JavaScript , estas dos llamadas son equivalentes:

MyFunctionCall ({ xPosition : 20 , yPosition : 50 , width : 100 , height : 5 , drawingNow : true });
MyFunctionCall ({ ancho : 100 , alto : 5 , posición x : 20 , posición y : 50 , dibujandoAhora : verdadero });

Comparar con C99: [ 15 ]

struct MyParam { int xPosition ; int yPosition ; int width ; int height ; unsigned char drawingNow ; }; MyParam parameters = { . xPosition = 20 , . yPosition = 50 , . width = 100 , . height = 5 , . drawingNow = TRUE }; MyFunctionCall ( & parameters );

Apoyo especial

En Perl y Ruby pre-2.0 existe una convención similar (generalmente llamada hash o hash de opciones [ 16 ] ), con soporte especial para omitir los delimitadores dentro de las llamadas a funciones. Como ejemplo, la función `new` del módulo principal `Net::FTP` acepta un hash de argumentos opcionales. [ 17 ]

Con llamadas a métodos encadenados

En los lenguajes de programación orientados a objetos , es posible utilizar el encadenamiento de métodos para simular parámetros con nombre, como una forma de interfaz fluida . Cada argumento de parámetro con nombre se reemplaza por un método en un objeto "argumentos" que modifica y luego devuelve el objeto. En C++, esto se denomina modismo de parámetros con nombre . [ 18 ] El objeto puede pasarse a una función que utilice los argumentos que contiene.

El encadenamiento de métodos se utiliza a menudo junto con el patrón constructor como una forma de anular los valores predeterminados proporcionados por la clase constructora.

Véase también

Referencias

  1. Manual de referencia del lenguaje de programación Ada . Departamento de Defensa de los Estados Unidos. 1983.
  2. BillWagner. "Argumentos con nombre y opcionales - Guía de programación en C#" . Microsoft Learn . Consultado el 16 de junio de 2021 .
  3. "Funciones" . The Common Lisp Cookbook . Consultado el 28 de octubre de 2021 .
  4. "Funciones | Kotlin" . Ayuda de Kotlin . Consultado el 16 de junio de 2021 .
  5. "Manual/Procedimientos de Nim" .
  6. "8. Sentencias compuestas - 8.7. Definiciones de funciones" . Documentación de Python . Consultado el 28/10/2021 .
  7. "10.3 Argumentos con nombre y valores predeterminados" . Una introducción a R. The Comprehensive R Archive Network . Consultado el 28 de octubre de 2021 .
  8. "PHP: Argumentos de función - Manual - Argumentos con nombre" . PHP . Consultado el 16 de junio de 2021 .
  9. Anderson, Ian C. (21 de julio de 2014). "Argumentos de palabras clave de Ruby 2" . thoughtbot . Recuperado el 28 de octubre de 2021 .
  10. "Argumentos con nombre" . Documentación de Scala . Consultado el 16 de junio de 2021 .
  11. "Funciones" . El lenguaje de programación Swift (Swift 5.1) . Consultado el 27 de enero de 2020 .
  12. KathleenDollard. "Paso de argumentos por posición y por nombre - Visual Basic" . Microsoft Learn . Consultado el 16 de junio de 2021 .
  13. Biblioteca para desarrolladores: la implementación de una clase proporciona su comportamiento interno.
  14. "Texto de inicialización designado" (PDF) .
  15. "Inicializadores designados (usando la colección de compiladores GNU (GCC))" .
  16. Programación en Perl 2.9: Hashes
  17. Módulo principal de Perl Net::FTP
  18. Preguntas frecuentes de C++, 10.20 ¿Qué es el "Modismo de parámetros con nombre"?