stringtranslate.com

Parámetro nombrado

En programación informática , los parámetros con nombre , argumentos de parámetros con nombre , argumentos con nombre o argumentos de palabras clave se refieren al soporte de un lenguaje informático para llamadas de función para asociar claramente cada argumento con un parámetro dado dentro de la llamada de función.

Descripción general

Una llamada de función que utiliza parámetros con nombre se diferencia de una llamada de 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 Java o C# que no utiliza parámetros con nombre:

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

Usando parámetros nombrados en Python , la llamada se puede escribir como:

ventana .addNewControl ( title = " Título" , xPosition = 20 , yPosition = 50 , width = 100 , height = 50 , drawingNow = True )     

Usando parámetros nombrados en PHP , la llamada se puede escribir como:

$ventana -> addNewControl ( título :  "Título" ,  posiciónX :  20 ,  posiciónY :  50 ,  ancho :  100 ,  alto :  50 ,  dibujoAhora :  Verdadero );

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

Uso en lenguajes de programación

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

estructura A { int a {}, int b {} };       void foo ( A bar ) { std :: cout << bar . a << bar . b ; } foo ({ . a = 1 , . b = 3 });             

Orden de parámetros

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

Con parámetros nombrados, normalmente es posible proporcionar los argumentos en cualquier orden, ya que el nombre del parámetro adjunto a cada argumento identifica su propósito. Esto reduce la conexidad entre las partes del programa. Algunos lenguajes admiten parámetros nombrados, pero aún requieren que los argumentos se proporcionen en un orden específico.

Parámetros opcionales y parámetros posicionales

Los parámetros con nombre se utilizan a menudo junto con 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 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 tanto parámetros con nombre opcionales como aplicaciones parciales , 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 al requerir 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 agregando un parámetro posicional ficticio de tipo unit .

Emulando

En los idiomas que no admiten parámetros con nombre, algunos de los mismos beneficios se pueden lograr de otras maneras.

Con documentación

Su valor como documentación se puede replicar 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 verifican para comprobar su exactitud 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 capacidad 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 , ancho : 100 , alto : 5 , drawingNow : verdadero });           
MyFunctionCall ({ ancho : 100 , alto : 5 , xPosition : 20 , yPosition : 50 , drawingNow : verdadero });           

Comparar con C99: [14]

struct MyParam { int xPosition ; int yPosition ; int ancho ; int alto ; unsigned char drawingNow ; }; MyParam parámetros = { . xPosition = 20 , . yPosition = 50 , . ancho = 100 , . alto = 5 , . drawingNow = TRUE }; MyFunctionCall ( & parámetros );                                

Apoyo especial

En Perl y en Ruby anterior a la versión 2.0 existe una convención similar (generalmente denominada hash o hash de opciones [15] ), con soporte especial para omitir los delimitadores dentro de las llamadas de función. Como ejemplo, la nueva función Net::FTP del módulo principal acepta un hash de argumentos opcionales. [16]

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 nombrados, como una forma de interfaz fluida . Cada argumento de parámetro nombrado se reemplaza con un método en un objeto "argumentos" que modifica y luego devuelve el objeto. En C++, esto se denomina el modismo de parámetro nombrado . [17] Luego, el objeto puede pasarse a una función que utiliza los argumentos que contiene.

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

Véase también

Referencias

  1. ^ Manual de referencia para el 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 de C#". Microsoft Learn . Consultado el 16 de junio de 2021 .
  3. ^ "Funciones". El libro de recetas de Common Lisp . Consultado el 28 de octubre de 2021 .
  4. ^ "Funciones | Kotlin". Ayuda de Kotlin . Consultado el 16 de junio de 2021 .[ enlace muerto ]
  5. ^ "8. Declaraciones compuestas - 8.7. Definiciones de funciones". Documentación de Python . Consultado el 28 de octubre de 2021 .
  6. ^ "10.3 Argumentos nombrados y valores predeterminados". Introducción a R . The Comprehensive R Archive Network . Consultado el 28 de octubre de 2021 .
  7. ^ "PHP: Argumentos de función - Manual - Argumentos con nombre". PHP . Consultado el 16 de junio de 2021 .
  8. ^ Anderson, Ian C. (21 de julio de 2014). «Argumentos de palabras clave de Ruby 2». thoughtbot . Consultado el 28 de octubre de 2021 .
  9. ^ "Argumentos con nombre". Documentación de Scala . Consultado el 16 de junio de 2021 .
  10. ^ "Funciones". El lenguaje de programación Swift (Swift 5.1) . Consultado el 27 de enero de 2020 .
  11. ^ KathleenDollard. "Pasar argumentos por posición y por nombre - Visual Basic". Microsoft Learn . Consultado el 16 de junio de 2021 .
  12. ^ Biblioteca para desarrolladores: la implementación de una clase proporciona su comportamiento interno
  13. ^ "Palabra de inicialización designada" (PDF) .
  14. ^ "Inicios designados (utilizando la colección de compiladores GNU (GCC))".
  15. ^ Programación Perl 2.9: Hashes
  16. ^ Módulo central de Perl Net::FTP
  17. ^ Preguntas frecuentes de C++, 10.20 ¿Qué es el "idioma de parámetro nombrado"?

Enlaces externos