Sentencias simples (expresiones)

Las sentencias simples contienen expresiones tales como asignar nuevos valores o resultados de cálculos a variables, así como llamadas a funciones.

Formalmente, la sintaxis es la siguiente:

expression ;

El punto y coma del final es importante. Dado que los códigos fuente de MQL5 admiten formato libre, el ';' es el único delimitador que le indica al compilador dónde terminó la declaración anterior y comenzó la siguiente. Por regla general, las declaraciones se escriben en líneas separadas, como por ejemplo así:

int i = 0j = 1k;   // declaration statement
++i;                   // simple statement
j += i;                // simple statement
k = (i + 1) * (j + 1); // simple statement
Print(i" "j);      // simple statement

Sin embargo, las normas no prohíben la escritura de código abreviado:

int i=0,j=1;++i;j+=i;k=(i+1)*(j+1);Print(i," ",j);

Si no fuera por los ';', las expresiones adyacentes podrían «pegarse» silenciosamente y dar lugar a resultados no deseados. Por ejemplo, la expresión x = y - 10 * z bien podría ser dos: x = y; y -10 * z; (-10 con un signo menos unario). ¿Cómo es posible?

El hecho es que es sintácticamente permisible escribir una sentencia que realmente funcione en vano, es decir, que no guarde el resultado. He aquí otro ejemplo:

i + j// warning: expression has no effect

El compilador emite un aviso del tipo «la expresión no tiene efecto». La posibilidad de construir tales expresiones es necesaria porque los tipos de objeto, que veremos en la Parte 3, permiten la sobrecarga de operadores, es decir, podemos sustituir el significado habitual de los símbolos de los operadores por algunas acciones específicas. Entonces, si el tipo de i y j no es int, sino alguna clase con una operación de suma sobrescrita, tal notación tendrá efecto y el compilador no emitirá ningún aviso.

Las sentencias simples sólo pueden escribirse dentro de sentencias compuestas. Por ejemplo, llamar a la función Print fuera de una función no funcionará:

Print("Hello "Symbol());
void OnStart()
{
}

Obtendremos una cascada de errores::

'Print' - unexpected token, probably type is missing?
'Hello, ' - declaration without type
'Hello, ' - comma expected
'Symbol' - declaration without type
'(' - comma expected
')' - semicolon expected
')' - expressions are not allowed on a global scope

La más relevante, en este caso, es la última: «las expresiones no están permitidas en el contexto global».