返回跳转

return 运算符设计用于从 函数返回控制。假设所有的可执行语句都在一个特定的函数内部,它可以被用来间接中断包含它的任何嵌套层次的 forwhiledo 循环。应该考虑到,与 continue,尤其是 break 不同,函数内部中断的循环之后的所有语句都将被忽略。

return 运算符和语法:

return ([expression]) ;

指定表达式的需要是由函数签名决定的(关于这一点的更多内容将在 相关章节中讨论)。为了全面理解 return 在控制语句的上下文中的工作原理,让我们来看看主脚本函数 OnStart 的一个例子。由于它属于 void 类型,即不返回任何内容,因此运算符采用以下形式:

return ;

break 相关章节中,我们实施了一个算法来查找字符串中的重复字符。要中断两个嵌套循环,我们不仅要使用 break,还要修改外部循环的条件。

使用 return 操作符,这就可以用一种更简单的方式来完成 (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");
}

如果在 if 运算符中发现等号,我们显示符号并退出函数。如果该算法在一个非 OnStart 函数的自定义函数内,我们可以为它定义一个返回类型(例如,ushort 而不是 void),并使用完整的 return 形式将找到的字符传递给调用代码。

由于已知双字母 'l' 存在于测试字符串中,所以循环 (Print) 之后的语句将不被执行。