More creations to inspire you
IAU@HLPF2019
Presentation
SPRING IN THE FOREST 2
Presentation
HUMAN RIGHTS
Presentation
BLENDED PEDAGOGUE
Presentation
VALENTINE'S DAY PRESENTATION
Presentation
WOLF ACADEMY
Presentation
EXPLLORING SPACE
Presentation
Transcript
MARIA FERNANDA CRRUZ CRUZ--21060071
1.3
COMPROMASION DE TIPOS
COMPROBACION DE TIPO
La comprobación de tipos asegura que el tipo de una construcción coincida con lo que espera su contexto. Por ejemplo, en la siguiente instrucción if:if (expr) instr se espera que la expresión expr tenga el tipo boolean.
Las reglas de comprobación de tipos siguen la estructura operador/operando de la sintaxis abstracta. Suponga que el operador rel representa a los operadores relacionales como <=. La regla de tipos para el grupo de operadores rel es que sus dos operandos deben tener el mismo tipo, y el resultado tiene el tipo booleano. Utilizando Utilizando el atributo tipo para el tipo de una ex- presión, dejemos que E consista de rel aplicado a E₁ y E2. El tipo de E puede comprobarse al momento de construir su nodo, mediante la ejecución de código como el siguiente: if (Ex.tipo E2.tipo) E.tipo = boolean; else error;
La idea de relacionar los tipos actuales con los esperados se sigue aplicando, aún en las siguientes situaciones:
Coerciones
Una merción ocurre cuando el tipo de un operando se convierte en forma automática al tipo esperado por el operador. En una expresión como 2 * 3.14, la trans- formación usual es convertir el entero 2 en un número de punto flotante equivalente, 2.0, y después realizar una operación de punto flotante con el par resultante de operandos de punto flotante. . La definición del lenguaje especifica las coerciones disponibles. Por ejemplo, la regla actual para rel que vimos antes podría ser que E₁.tipo y E2.tipo puedan convertirse al mismo tipo. En tal caso, sería legal comparar, por decir, un entero con un valor de punto flotante.
Sobrecarga.
El operador + en Java representa la suma cuando se aplica a enteros; significa concatenación cuando se aplica a cadenas. Se dice que un símbolo está sobrecargado si tiene distintos significados, dependiendo de su contexto. Por ende, + está sobrecargado en Java. Para determinar el significado de un operador sobrecargado, hay que considerar los tipos conocidos de sus operandos y resultados. Por ejemplo, sabemos que el + en z = x + y es concatenación si sabemos que cualquiera de las variables x, y o z es de tipo cadena. No obstante, si también sabemos que alguna de éstas es de tipo entero, entonces tenemos un error en los tipos y no hay significado para este uso de +.