Operador return

El operador return está diseñado para devolver el control de las funciones. Dado que todas las sentencias ejecutables están dentro de una función en concreto, se puede utilizar de forma indirecta para interrumpir conteniendo bucles for, while, y do de cualquier nivel de anidamiento. Hay que tener en cuenta que, a diferencia de continue y, sobre todo, de break, también se ignorarán todas las sentencias que sigan a bucles interrumpidos dentro de la función.

Sintaxis del operador return :

return ([expression]) ;

La necesidad de especificar una expresión viene determinada por la firma de la función (encontrará más información sobre este tema en la sección correspondiente). Para comprender de forma general cómo funciona return en el contexto de las sentencias de control, veamos un ejemplo con la función de script principal OnStart. Puesto que es del tipo void, es decir, no devuelve nada, el operador adopta la siguiente forma:

return ;

En la sección acerca de break implementamos un algoritmo para encontrar caracteres duplicados en una cadena. Para romper dos bucles anidados, no sólo utilizamos break, sino que también modificamos la condición del bucle exterior.

Con el operador return, esto puede hacerse de una forma más sencilla (StmtJumpReturn.mq5).

void OnStart()
{
   string s = "Hello, " + Symbol();
   const int n = StringLen(s);
   for(int i = 0i < n; ++i)
   {
      for(int j = i + 1j < n; ++j)
      {
         if(s[i] == s[j])
         {
            PrintFormat("Duplicate: %c"s[i]);
            return;
         }
      }
   }
   
   Print("No duplicates");
}

Si se encuentra la igualdad en el operador if, mostramos el símbolo y salimos de la función. Si este algoritmo estuviera en una función personalizada distinta de OnStart podríamos definir un tipo de retorno para ella (por ejemplo, ushort en lugar de void) y pasar el carácter encontrado utilizando la forma completa return al código de llamada.

Como se sabe que la letra doble 'l' existe en la cadena de prueba, la sentencia que sigue a los bucles (Print) no se ejecutará.