Tipo de conversión


En informática , conversión de tipos , [1] [2] conversión de tipos , [1] [3] coerción de tipos , [3] y malabarismo de tipos [4] [5] son formas diferentes de cambiar una expresión de un tipo de datos a otro . . Un ejemplo sería la conversión de un valor entero en un valor de punto flotante o su representación textual como una cadena y viceversa. Las conversiones de tipos pueden aprovechar ciertas características de las jerarquías de tipos o las representaciones de datos.. Dos aspectos importantes de una conversión de tipo son si ocurre implícitamente (automáticamente) o explícitamente , [1] [6] y si la representación de datos subyacente se convierte de una representación a otra, o si una representación determinada simplemente se reinterpreta como la representación de otra . tipo de datos. [6] [7] En general, tanto los tipos de datos primitivos como los compuestos se pueden convertir.

Cada lenguaje de programación tiene sus propias reglas sobre cómo se pueden convertir los tipos. Los lenguajes con escritura fuerte generalmente realizan pocas conversiones implícitas y desalientan la reinterpretación de representaciones, mientras que los lenguajes con escritura débil realizan muchas conversiones implícitas entre tipos de datos. El lenguaje de escritura débil a menudo permite obligar al compilador a interpretar arbitrariamente un elemento de datos como si tuviera diferentes representaciones; esto puede ser un error de programación no obvio o un método técnico para tratar directamente con el hardware subyacente.

En la mayoría de los lenguajes, la palabra coerción se usa para denotar una conversión implícita , ya sea durante la compilación o durante el tiempo de ejecución . Por ejemplo, en una expresión que mezcla números enteros y de coma flotante (como 5 + 0,1), el compilador convertirá automáticamente la representación de enteros en una representación de coma flotante para que no se pierdan las fracciones. Las conversiones de tipo explícitas se indican escribiendo código adicional (por ejemplo, agregando identificadores de tipo o llamando a rutinas integradas ) o codificando rutinas de conversión para que el compilador las use cuando de lo contrario se detendría con un tipo no coincidente.

En la mayoría de los lenguajes similares a ALGOL , como Pascal , Modula-2 , Ada y Delphi , la conversión y el casting son conceptos claramente diferentes. En estos lenguajes, la conversión se refiere a cambiar implícita o explícitamente un valor de un formato de almacenamiento de tipo de datos a otro, por ejemplo, un entero de 16 bits a un entero de 32 bits. Las necesidades de almacenamiento pueden cambiar como resultado de la conversión, incluida una posible pérdida de precisión o truncamiento. La palabra cast , por otro lado, se refiere a cambiar explícitamente la interpretación del patrón de bitsrepresentando un valor de un tipo a otro. Por ejemplo, 32 bits contiguos pueden tratarse como una matriz de 32 booleanos, una cadena de 4 bytes, un entero de 32 bits sin signo o un valor de punto flotante de precisión simple IEEE. Debido a que los bits almacenados nunca se cambian, el programador debe conocer detalles de bajo nivel, como el formato de representación, el orden de los bytes y las necesidades de alineación, para realizar una conversión significativa.

En la familia de lenguajes C y ALGOL 68 , la palabra cast generalmente se refiere a una conversión de tipo explícita (a diferencia de una conversión implícita), lo que provoca cierta ambigüedad sobre si se trata de una reinterpretación de un patrón de bits o una representación de datos reales. conversión. Más importante es la multitud de formas y reglas que se aplican a qué tipo de datos (o clase) ubica un puntero y cómo el compilador puede ajustar un puntero en casos como la herencia de objetos (clases).

La conversión de tipo implícita, también conocida como coerción , es una conversión de tipo automática realizada por el compilador . Algunos lenguajes de programación permiten que los compiladores proporcionen coerción; otros lo requieren.