stringtranslate.com

Tipo de firma

En informática , una firma de tipo o anotación de tipo define las entradas y salidas de una función , subrutina o método . Una firma de tipo incluye el número, los tipos y el orden de los argumentos de la función . Un uso importante de una firma de tipo es la resolución de sobrecarga de funciones , donde se selecciona una definición particular de una función que se llamará entre muchas formas sobrecargadas.

Ejemplos

C/C++

En C y C++ , la firma de tipo se declara mediante lo que comúnmente se conoce como prototipo de función . En C/C++, una declaración de función refleja su uso ; por ejemplo, un puntero de función con la firma se llamaría así:(int)(char, double)

carácter c ; doble d ; int retVal = ( * fPtr )( c , d );      

Erlang

En Erlang , las firmas de tipo se pueden declarar opcionalmente, como: [1]

- función de especificación nombre_función ( tipo1 (), tipo2 (), ...) -> tipo_salida ().     

Por ejemplo:

- especificación is_even ( número ()) -> booleano ().   

Haskell

Una firma de tipo en Haskell generalmente toma la siguiente forma:

nombreFunción :: arg1Type -> arg2Type -> ... -> argNType        

Tenga en cuenta que el tipo del resultado puede considerarse como todo lo que esté más allá del primer argumento suministrado. Esto es una consecuencia de la currificación , que es posible gracias al soporte de Haskell para funciones de primera clase ; esta función requiere dos entradas donde se suministra un argumento y la función se "currifica" para producir una función para el argumento no suministrado. Por lo tanto, llamar a , donde , produce una nueva función que puede llamarse para producir .f xf :: a -> b -> cf2 :: b -> cf2 bc

Las especificaciones de tipo reales pueden consistir en un tipo real, como Integer, o una variable de tipo general que se utiliza en funciones polimórficas paramétricas , como , o , o . Por lo tanto, podemos escribir algo como:abanyTypefunctionName :: a -> a -> ... -> a

Dado que Haskell admite funciones de orden superior , las funciones se pueden pasar como argumentos. Esto se escribe de la siguiente manera:functionName :: (a -> a) -> a

Esta función toma una función con tipo firma y devuelve datos del tipo out.a -> aa

Java

En la máquina virtual Java , las firmas de tipos internas se utilizan para identificar métodos y clases a nivel del código de la máquina virtual.

Ejemplo: El método se representa en código de bytes como .String String.substring(int, int)Ljava/lang/String.substring(II)Ljava/lang/String;

La firma del mainmétodo se ve así: [2]

público estático void principal ( String [] args );    

Y en el bytecode desensamblado, toma la forma deLsome/package/Main/main:([Ljava/lang/String;)V

La firma del método main()contiene tres modificadores:

Firma

La firma de una función consta del prototipo de la función, que especifica la información general sobre la función, como el nombre, el alcance y los parámetros. Muchos lenguajes de programación utilizan la manipulación de nombres para pasar más información semántica de los compiladores a los enlazadores. Además de la manipulación, hay un exceso de información en la firma de una función (almacenada internamente en la mayoría de los compiladores) que no está disponible de inmediato, pero a la que se puede acceder. [3]

Comprender el concepto de firma de función es un concepto importante para todos los estudios de informática.

La práctica de la herencia múltiple requiere tener en cuenta las firmas de las funciones para evitar resultados impredecibles. La teoría de la informática, y en particular el concepto de polimorfismo , hacen un uso considerable del concepto de firma de función.

En el lenguaje de programación C , una firma es aproximadamente equivalente a su definición de prototipo .

En la familia de lenguajes de programación ML , "firma" se utiliza como palabra clave que hace referencia a una construcción del sistema de módulos que cumple el papel de una interfaz .

Firma del método

En programación informática , especialmente en programación orientada a objetos , un método se identifica comúnmente por su firma de método única , que generalmente incluye el nombre del método y el número, los tipos y el orden de sus parámetros . [4] Una firma de método es el tipo más pequeño de un método.

Ejemplos

C/C++

En C/C++, la firma del método es el nombre del método y el número y tipo de sus parámetros, pero es posible tener un último parámetro que consista en una matriz de valores:

int printf ( const char * , ... );    

La manipulación de estos parámetros se puede realizar utilizando las rutinas en el encabezado de la biblioteca estándar .<stdarg.h>

En C++, el tipo de retorno también puede seguir a la lista de parámetros, lo que se conoce como tipo de retorno final . La diferencia es solo sintáctica; en cualquier caso, la firma resultante es idéntica:

auto printf ( const char * ... ) -> int ;     

DO#

De manera similar a la sintaxis de C, las firmas de métodos en C# se componen de un nombre y el número y tipo de sus parámetros, donde el último parámetro puede ser una matriz de valores: [5]

void Agregar ( salida int suma , parámetros int [] valor ); [...] Agregar ( salida suma , 3 , 5 , 7 , 11 , - 1 ); // suma == 25             

Java

En Java , la firma de un método se compone de un nombre y del número, tipo y orden de sus parámetros. Los tipos de retorno y las excepciones lanzadas no se consideran parte de la firma del método, ni tampoco los nombres de los parámetros; el compilador los ignora para verificar la unicidad del método.

Las firmas de métodos ayudan a distinguir los métodos sobrecargados (métodos con el mismo nombre) en una clase. Los tipos de retorno no se incluyen en la sobrecarga. Solo se deben utilizar las firmas de métodos para distinguir los métodos sobrecargados. [6]

Por ejemplo, los dos métodos siguientes tienen firmas diferentes:

void hacerAlgo ( Cadena [] x ); // hacerAlgo(Cadena[]) void hacerAlgo ( Cadenax ); // hacerAlgo(Cadena)      

Los dos métodos siguientes tienen la misma firma:

int hacerAlgo ( int x ); // hacerAlgo(int) void hacerAlgo ( int y ) lanza Excepción ; // hacerAlgo(int)        

Julia

En Julia , las firmas de funciones toman la siguiente forma:

comisión ( venta :: Int , tasa :: Float64 ) :: Float64 

Los tipos en los argumentos se utilizan para el envío múltiple . El tipo de retorno se valida cuando la función devuelve un valor y se genera una excepción en tiempo de ejecución si el tipo del valor no coincide con el tipo especificado.

Se permiten y se recomiendan los tipos abstractos para implementar un comportamiento general que sea común a todos los subtipos. Por lo tanto, la función anterior se puede reescribir de la siguiente manera. En este caso, la función puede aceptar cualquier subtipo entero y real según corresponda.

comisión ( venta :: Entero , tasa :: Real ) :: Real 

Los tipos son completamente opcionales en los argumentos de una función. Cuando no se especifican, es equivalente a utilizar el tipo Any, que es el supertipo de todos los tipos. Es idiomático especificar los tipos de argumentos, pero no el tipo de retorno.

Objetivo-C

En el lenguaje de programación Objective-C , las firmas de métodos de un objeto se declaran en el archivo de encabezado de la interfaz. Por ejemplo,

-  ( id ) initWithInt: ( int ) valor ;

define un método initWithIntque devuelve un objeto general (an id) y toma un argumento entero. Objective-C solo requiere que un tipo en una firma sea explícito cuando el tipo no lo es id; esta firma es equivalente:

-  initWithInt: ( int ) valor ;

Óxido

En Rust , las firmas de funciones toman la siguiente forma:

 comisión fn ( venta : u32 , tasa : f64 ) -> f64 ;  

Véase también

Referencias

  1. ^ "Guía del usuario del manual de referencia de Erlang versión 13.1.4". erlang.org . 7.5 Especificaciones de funciones. Archivado desde el original el 27 de enero de 2023 . Consultado el 27 de abril de 2023 .
  2. ^ "Firma (funciones) - Glosario de documentos web de MDN: definiciones de términos relacionados con la Web | MDN". developer.mozilla.org . 2023-06-08 . Consultado el 2024-07-05 .
  3. ^ "Referencia de C++: términos de programación" . Consultado el 3 de diciembre de 2013 .
  4. ^ Paul Leahy. "Firma de método". Guía de About.com . Consultado el 31 de mayo de 2011. Una firma de método es parte de la declaración del método . Es la combinación del nombre del método y la lista de parámetros.
  5. ^ Mössenböck, Hanspeter (25 de marzo de 2002). "C# avanzado: número variable de parámetros" (PDF) . Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. pag. 52 . Consultado el 3 de agosto de 2011 .
  6. ^ "Capítulo 4. Formato de archivo de clase". docs.oracle.com . Consultado el 17 de octubre de 2021 .