Оператор Exit.

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

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

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

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

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

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

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

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

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

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

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

 
Denis Nikolaev:

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

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


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

 

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

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

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


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

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

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

 

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

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

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

 
Aleksei Stepanenko:

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

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

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

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

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

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

 

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

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

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

do
   {

   }
while(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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