User_mt5  
Хорошо было бы иметь в языке MQL5 (подобно Сontinue) иметь:
оператор Exit, который передавал бы управление на ближайшую внешнюю закрывающую фигурную скобку.
Имеется ввиду скобочный блок, в том числе, не являющийся составной частью сложных операторов.

Было бы удобно при программировании сложной логики,
в частности, если после if нужно выполнить пару строк, а потом выйти из блока логики.
Этот оператор поможет избавиться от множества вложенных if-ов и необходимости лишних проверок.

Пока слабым утешением служит switch(0) с его break-ом.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Maxim Kuznetsov  
User_mt5:
Хорошо было бы иметь в языке MQL5 (подобно Сontinue) иметь:
оператор Exit, который передавал бы управление на ближайшую внешнюю закрывающую фигурную скобку.
Имеется ввиду скобочный блок, в том числе, не являющийся составной частью сложных операторов.

Было бы удобно при программировании сложной логики,
в частности, если после if нужно выполнить пару строк, а потом выйти из блока логики.
Этот оператор поможет избавиться от множества вложенных if-ов и необходимости лишних проверок.

Пока слабым утешением служит switch(0) с его break-ом.

не надо останавливаться на достигнутом !

чтобы спагетти стало наваристым надо добавить goto и нелокальные longjump

Denis Nikolaev  
User_mt5:
Хорошо было бы иметь в языке MQL5 (подобно Сontinue) иметь:
оператор Exit, который передавал бы управление на ближайшую внешнюю закрывающую фигурную скобку.
Имеется ввиду скобочный блок, в том числе, не являющийся составной частью сложных операторов.

Было бы удобно при программировании сложной логики,
в частности, если после if нужно выполнить пару строк, а потом выйти из блока логики.
Этот оператор поможет избавиться от множества вложенных if-ов и необходимости лишних проверок.

Пока слабым утешением служит switch(0) с его break-ом.

 break можно использовать во всех циклах

User_mt5  
Denis Nikolaev:

 break можно использовать во всех циклах

Из цикла я выйду легко.


Бывает сложная разветвлённая логика.
При достижении искомого результата всё это нужно разом прекратить.

Aleksei Stepanenko  

Блок логики вынести в отдельную функцию и выходить из неё ретурном из любого места. Читаемость отличная, рекомендую.

bool ЯКрасавчик(bool Лысый, bool Толстый, bool Хромой, bool Косой, bool Горбатый)
   {
   if(Лысый) return(false);
   if(Толстый) return(false);
   if(Хромой) return(false);
   if(Косой) return(false);
   if(Горбатый) return(false);
   return(true);
   }
Georgiy Merts  
User_mt5:

Из цикла я выйду легко.


Бывает сложная разветвлённая логика.
При достижении искомого результата всё это нужно разом прекратить.

Верно выше Алексей предложил оператор return() - я всегда пользуюсь этим методом. Очень удобно и легкоотлаживаемо. 

Если логика настолько хитрая, что ее нельзя упаковать в отдельную функцию с возвратами - то, боюсь, здесь плохая проработка структуры программы, и потенциальное место для "спагетти-кода". 

Dmitry Fedoseev  

Подобно continue - это break.

Есkи нужно из нескольких уровней вложенности выскочить, то выносить эту часть кода в функцию и использовать return.

Любую часть кода легко вынести в отдельную функцию, используя передачу параметров по ссылке.

User_mt5  
Aleksei Stepanenko:

Блок логики вынести в отдельную функцию и выходить из неё ретурном из любого места. Читаемость отличная, рекомендую.

Очень хороший пример.
Читаемость и идеология функции - замечательные.

А теперь представим, что есть несколько таких функциональных блоков.
Если каждый затолкать в функцию, то затруднительно смотреть весь код одновременно.
Пока пишешь и всё это у тебя в верхней памяти, то всё несложно.
Если же читать этот же код через месяцы, то уже сложнее.

Вообще, любая инновация - это замечательная свобода творчества. Мне нравится эта мысль.
Так легко быть умником, который тыкает носом неразумных новичков в простое формальное решение.
Но есть и свобода и красота, в конце концов. Даже в MQL нашем неистребимом:)

Вот простой пример:
нет такого кода, который нельзя было бы реализовать, используя for();
но зачем-то же понадобился while().

Выходить exit-ом из фигурного блока - это было бы красиво:)

Aleksei Stepanenko  

Согласен. Элегантный код - это красиво. Но тут, понимаете, по функционалу не мы решаем. MQL - Си-подобный код, поэтому маловероятны прыжки в сторону.

Поэтому наводим красоту имеющимися средствами. И когда я осилю ООП, вот это будет чудо чудное, лаконичность и выразительность. 

И, у Вайл есть свои плюсы, например, можно первый раз войти в цикл без всяких условий, это иногда очень удобно.

do
   {

   }
while(...)

Да, красота спасёт мир, Вы правы.

Koldun Zloy  
User_mt5:
Хорошо было бы иметь в языке MQL5 (подобно Сontinue) иметь:
оператор Exit, который передавал бы управление на ближайшую внешнюю закрывающую фигурную скобку.
Имеется ввиду скобочный блок, в том числе, не являющийся составной частью сложных операторов.

Было бы удобно при программировании сложной логики,
в частности, если после if нужно выполнить пару строк, а потом выйти из блока логики.
Этот оператор поможет избавиться от множества вложенных if-ов и необходимости лишних проверок.

Пока слабым утешением служит switch(0) с его break-ом.

Тут есть тема с более нужными предложениями, но разработчики её игнорируют.

И даже сообщения об ошибках замечают выборочно.

А то что Вы предлагаете, такая мелочь, без которой легко можно обойтись.

Пожелания к синтаксису языка MQL
Пожелания к синтаксису языка MQL
  • 2018.10.02
  • www.mql5.com
Решил создать такую тему, т.к...
Georgiy Merts  
User_mt5:

Очень хороший пример.
Читаемость и идеология функции - замечательные.

А теперь представим, что есть несколько таких функциональных блоков.
Если каждый затолкать в функцию, то затруднительно смотреть весь код одновременно.
Пока пишешь и всё это у тебя в верхней памяти, то всё несложно.
Если же читать этот же код через месяцы, то уже сложнее.

Вообще, любая инновация - это замечательная свобода творчества. Мне нравится эта мысль.
Так легко быть умником, который тыкает носом неразумных новичков в простое формальное решение.
Но есть и свобода и красота, в конце концов. Даже в MQL нашем неистребимом:)

Вот простой пример:
нет такого кода, который нельзя было бы реализовать, используя for();
но зачем-то же понадобился while().

Выходить exit-ом из фигурного блока - это было бы красиво:)

Так ведь это и хорошо, когда функциональные блоки "распиханы" по функциям !  По названию - ты видишь, что там происходит. Если требуется отладить, входишь внутрь. Если нет - проходишь просто "сверху"... 

По-моему, это как раз более "читаемо" и понятно, чем выходы по exit'y. 

Лично мне даже оператор break - очень не нравится, как раз потому, что он предусматривает выход из блока, а даже при двух уровнях вложенности - легко ошибиться, рассматривая логику, из какого именно фигурного блока совершается выход. Стараюсь использовать исключительно оператор continue. Ну или return, как тут предлагалось. 

Надо привести хотя бы один пример, когда вот такой exit - будет нагляднее и легче в отладке, чем выделение блока в функцию с return'ом. Тогда еще о чем-то можно говорить. Пока я не только не поддерживаю эту идею, но даже против. 

Причина обращения: