Sentencia vacía

La sentencia vacía es la más sencillo del lenguaje. Consta de un solo carácter: el punto y coma ';'

Una sentencia vacía se utiliza en el programa en aquellos lugares en los que la sintaxis requiere la presencia de una sentencia, pero la lógica del algoritmo ordena no hacer nada.

Por ejemplo, el siguiente bucle while se utiliza para encontrar un espacio en una cadena. La esencia entera del algoritmo se realiza directamente en el encabezado del bucle, por lo que su cuerpo debe estar vacío. Podríamos escribir un bloque vacío de llaves, pero aquí también funcionaría una sentencia vacía. (StmtNull.mq5).

int i = 0;
ushort c;
string s = "Hello, " + Symbol();
while((c = s[i++]) != ' ' && c != 0); // intentional ';' (!)
if(c == ' ')
{
   Print("Space found at: "i);
}

Tenga en cuenta que si se omite el punto y coma al final del encabezado while (quizás por accidente), entonces la sentencia if será tratada como el cuerpo del bucle. Como resultado, la función Print no enviará ningún mensaje al registro. De hecho, el programa no funcionará correctamente, aunque sin errores perceptibles.

La situación contraria también es posible: un punto y coma extra después del encabezado del bucle (donde no debería haber estado) «separará» el cuerpo del bucle de la cabecera, es decir, sólo se ejecutará una sentencia vacía en el bucle.

En este sentido, se debe comprobar la presencia de puntos y comas opcionales en el código, y siempre que se coloquen intencionadamente, dejar un comentario con explicaciones.

Por cierto: desde un punto de vista formal, la sentencia vacía también se utiliza en la sentencia for cuando omitimos la expresión de inicialización. De hecho, siempre hay inicialización:

for ( [initialization] ; [end loop condition]; [post-expression] )
  loop body

El primer carácter ';' forma parte de una sentencia de inicialización, que puede ser una expresión o una sentencia vacía; ambas contienen el carácter ';' al final, y la segunda no contiene nada más que ';'. Así se alcanza la opcionalidad (vaciedad).