En informática , una firma de tipo o una 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 contenidos en una función. Una firma de tipo se usa típicamente durante la resolución de sobrecarga para elegir la definición correcta de una función que se llamará entre muchos formularios sobrecargados.
Ejemplos de
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 como:(int)(char, double)
char c ; doble d ; int retVal = ( * fPtr ) ( c , d );
Erlang
En Erlang , las firmas de tipo se pueden declarar opcionalmente, como:
- especificaciones ( function_name ( tipo 1 (), tipo 2 (), ...) -> out_type ()).
Por ejemplo:
- especificación ( es_even ( número ()) -> booleano ()).}}
Haskell
Una firma de tipo en Haskell generalmente toma la siguiente forma:
functionName :: arg1Type -> arg2Type -> ... -> argNType
Tenga en cuenta que el tipo de resultado se puede considerar como todo lo que se encuentra más allá del primer argumento proporcionado. Esto es una consecuencia del currying , que es posible gracias al soporte de Haskell para funciones de primera clase ; esta función requiere dos entradas donde se proporciona un argumento y la función es "currizada" para producir una función para el argumento no proporcionado. Por lo tanto , llamar a where produce una nueva función que se puede llamar para producir .f x
f :: a -> b -> c
f2 :: b -> c
f2 b
c
Las especificaciones de tipo real 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 . Entonces podemos escribir algo como:a
b
anyType
functionName :: a -> a -> ... -> a
Dado que Haskell admite funciones de orden superior , las funciones se pueden pasar como argumentos. Esto está escrito como:functionName :: (a -> a) -> a
Esta función toma una función con firma de tipo y devuelve datos de tipo out.a -> a
a
Java
En la máquina virtual Java , las firmas de tipo internas se utilizan para identificar métodos y clases en el nivel del código de la máquina virtual.
Ejemplo: el método se representa en bytecode como .String String.substring(int, int)
Ljava/lang/String.substring(II)Ljava/lang/String;
La firma del main
método se ve así:
public static void main ( String [] args );
Y en el bytecode desensamblado, toma la forma de Lsome/package/Main/main:([Ljava/lang/String;)V
La firma del main()
método para el método contiene tres modificadores:
public
indica que cualquier objeto puede llamar al método.main()
static
indica que el método es un método de clase.main()
void
indica que el método no tiene valor de retorno.main()
Firma
Una firma de función consta del prototipo de función. Especifica la información general sobre una función como el nombre, el alcance y los parámetros. Muchos lenguajes de programación utilizan la alteración de nombres para transmitir más información semántica de los compiladores a los enlazadores. Además de alterar, hay un exceso de información en la firma de una función (almacenada internamente para la mayoría de los compiladores) que no está disponible, pero se puede acceder a ella. [1]
Comprender la noción de firma de función es un concepto importante para todos los estudios de ciencias de la computación.
- Las técnicas modernas de orientación a objetos hacen uso de interfaces , que son esencialmente plantillas hechas de firmas de funciones.
- C / C ++ usa la sobrecarga de funciones con varias firmas.
La práctica de la herencia múltiple requiere considerar las firmas de funciones para evitar resultados impredecibles.
La teoría de la informática, y el concepto de polimorfismo en particular, hacen mucho uso del concepto de firma de función.
En el lenguaje de programación C, la firma es aproximadamente equivalente a su definición de prototipo .
El término "firma" puede tener otros significados en informática:
- Las firmas de archivos pueden identificar o verificar el contenido de un archivo.
- Las firmas de bases de datos pueden identificar o verificar el esquema o una versión de una base de datos.
- En la familia ML de lenguajes de programación , "firma" se utiliza como palabra clave que se refiere a una construcción del sistema de módulos que desempeña el papel de una interfaz .
Firma del método
En la programación de computadoras , especialmente en la 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, tipos y orden de sus parámetros . [2] La firma de un método es el tipo más pequeño de un método.
Ejemplos de
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>
C#
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: [3]
void Add ( out int sum , params int [] value ); [...] Añadir ( fuera suma , 3 , 5 , 7 , 11 , - 1 ); // suma == 25
Java
En Java , la firma de un método se compone de un nombre y el 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 comprobar la unicidad del método.
Por ejemplo, los dos métodos siguientes tienen firmas diferentes:
void doSomething ( Cadena [] x ); // hacer Algo (Cadena []) void hacer Algo ( Cadena x ); // hacer algo (cadena)
Los siguientes tres métodos tienen todas las mismas firmas:
int doSomething ( int x ); // Hacer Algo (int) void Hacer Algo ( int y ) arroja Excepción ; // hacer algo (int)
Julia
En Julia , las firmas de funciones toman la siguiente forma:
comisión ( venta :: Int , tarifa :: Float64 ) :: Float64
Los tipos de 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.
Los tipos abstractos están permitidos y se recomiendan 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 Integer y Real en consecuencia.
comisión ( venta :: Entero , tasa :: Real ) :: Real
Los tipos son completamente opcionales en los argumentos de las funciones. Cuando no se especifica, equivale a utilizar el tipo Cualquiera, que es el supertipo de todos los tipos. Es idiomático especificar los tipos de argumentos pero no el tipo de retorno.
C objetivo
En el lenguaje de programación Objective-C , las firmas de métodos para un objeto se declaran en el archivo de encabezado de la interfaz. Por ejemplo,
- ( id ) initWithInt: valor ( int ) ;
define un método initWithInt
que 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: valor ( int ) ;
Oxido
En Rust , las firmas de funciones toman la siguiente forma:
comisión fn ( venta : u32 , tasa : f64 ) -> f64 ;
Referencias
- ^ "Referencia de C ++: términos de programación" . Consultado el 3 de diciembre de 2013 .
- ^ Paul Leahy. "Firma del método" . http://www.about.com/ : Guía de About.com . Consultado el 31 de mayo de 2011 .
La firma de un 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.
- ^ Mössenböck, Hanspeter (25 de marzo de 2002). "C # avanzado: número variable de parámetros" (PDF) . http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/ : Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. pag. 52 . Consultado el 3 de agosto de 2011 .