Conversión explícita de tipos

Para la conversión explícita de tipos, MQL5 admite dos formas de notación: el estilo C y el «funcional». El estilo C tiene la siguiente sintaxis:

target t = (target)s;

Aquí, target es el nombre del tipo de destino. Cualquier expresión puede ser una fuente de datos s. Si en ella se realiza alguna operación, debe encerrar la expresión entre paréntesis para que la conversión de tipo se aplique a toda la expresión.

Una sintaxis «funcional» alternativa es la siguiente:

target t = target(s);

Veamos un par de ejemplos:

double w = 100.0v = 7.0;
int p = (int)(w / v);      // 14

Aquí, el resultado de dividir dos números reales se convierte explícitamente al tipo int. De este modo, el programador confirma su intención de descartar la parte fraccionaria, y el compilador no emitirá avisos. Cabe señalar que MQL5 dispone de un grupo de funciones para redondear los números reales de diversas maneras (véase Funciones matemáticas).

Si, por el contrario, desea realizar una operación sobre números enteros con un resultado real, deberá aplicar la conversión de tipo a los operandos (en la propia expresión):

int x = 100y = 7;
double d = (double)x / y;  // 14.28571428571429

La conversión de uno de los operandos es suficiente para convertir automáticamente el resto al mismo tipo.

Si es necesario, puede realizar varias operaciones de conversión de tipos de forma secuencial. Dado que la operación de conversión es asociativa a la derecha, los tipos de destino se aplicarán en orden de derecha a izquierda. En el siguiente ejemplo, convertimos el cociente al tipo float (esta conversión permite una representación más compacta y con menos caracteres del valor) y, a continuación, a string. Sin una conversión explícita a string obtendríamos del compilador un aviso de «conversión implícita de número a cadena».

Print("Result:" + (string)(float)(w / v)); // Result:14.28571

No utilice la conversión explícita de tipos sólo para evitar un aviso del compilador. Si no tiene base práctica, está enmascarando un posible error en el programa.