En informática, la tipificación manifiesta es la identificación explícita por parte del programador de software del tipo de cada variable que se declara. Por ejemplo: si la variable X va a almacenar números enteros, entonces su tipo debe declararse como entero. El término "tipificación manifiesta" se utiliza a menudo junto con el término tipificación latente para describir la diferencia entre la pertenencia al tipo estático en tiempo de compilación del objeto y su identidad de tipo en tiempo de ejecución .
Por el contrario, algunos lenguajes de programación utilizan tipado implícito (también conocido como inferencia de tipos ), donde el tipo se deduce del contexto en tiempo de compilación, o permiten tipado dinámico en el que la variable simplemente se declara y se le puede asignar un valor de cualquier tipo en tiempo de ejecución.
Considere el siguiente ejemplo escrito en el lenguaje de programación C :
#incluir <stdio.h> int main ( void ) { char s [] = "Cadena de prueba" ; float x = 0.0f ; int y = 0 ; printf ( "Hola, mundo! \n " ); return 0 ; }
Las variables s , x e y se declararon como una matriz de caracteres, un número de punto flotante y un entero, respectivamente. El sistema de tipos rechaza, en tiempo de compilación, falacias como intentar sumar s y x . Desde C23 , la inferencia de tipos se puede utilizar en C con la palabra clave auto
. [1] Utilizando esa característica, el ejemplo anterior podría convertirse en:
#incluir <stdio.h> int main ( void ) { char s [] = "Cadena de prueba" ; // auto s = "Cadena de prueba"; es equivalente a char* s = "Cadena de prueba"; auto x = 0.0f ; auto y = 0 ; printf ( "Hola, mundo! \n " ); return 0 ; }
De manera similar al segundo ejemplo, en ML estándar no es necesario declarar explícitamente los tipos , sino que el tipo se determina mediante el tipo de la expresión asignada.
sea val s = "Cadena de prueba" val x = 0.0 val y = 0 en print "¡Hola, mundo! \n " fin
No hay tipos manifiestos en este programa, pero el compilador aún infiere los tipos string
y real
para int
ellos, y rechazaría la expresión s+x
como un error de tiempo de compilación.