Оператор Exit. - страница 2

 
User_mt5:

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

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

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

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

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

да, и ещё нужен ifex чтобы внешний блок знал что из внутреннего вышли по exit.

И глобальная переменная среды exitcount. Заживём!

 
User_mt5:

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

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

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

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

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


Вот такая штука классно отмеченную неприятность решает...

 
Vladimir Simakov:


Вот такая штука классно отмеченную неприятность решает...

Да, фолдинг уже давно просим.

 
Georgiy Merts:

Пока я не только не поддерживаю эту идею, но даже против. 

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

Хотя, возможно ли как то определить желаемый Exit define-ом? Тут знатоки есть. Можно такое сделать интересно?

 
Georgiy Merts:

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

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

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

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

Это по-вашему :)
На этом основании нельзя сделать вывод, что это - единственно правильное решение.

Пример я обозначил.
Множество мелких функций скрывают код. Я же предпочитаю видеть как можно больше одновременно.
Может потому 32"-го дисплея мне уже маловато, хочу 48".
Если логика сложная, то ещё достаёт возня с передачей параметров.
Справиться несложно, просто этот метод нельзя признать верхом совершенства.

Опять же, это только мои предпочтения.
Но, судя по всему, этот разговор развития не получит.

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

 
Ihor Herasko:

Да, фолдинг уже давно просим.

Это не фолдинг)
 
User_mt5:

Это по-вашему :)
На этом основании нельзя сделать вывод, что это - единственно правильное решение.

Это не по-его )) Такой подход является единственно правильным, потому что обоснован простотой чтения. Каждая функция, в том числе главная (OnTick(), OnCalculate(), main в C++), должна умещаться на экране. В главной функции просматривается весь скелет программы. Для этого названия вызываемых им функций нужно делать такими, чтобы по их названию было понятно, что функция выполняет. То есть не требуется смотреть код самой функции.

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

Думаю, дело в мышлении. Его то и нужно менять.


Пример я обозначил.

Просмотрел еще раз всю ветку. Не нашел примера, где exit необходим.

 
В эдиторе сделать сдвигашку - раздвигашку тела функций, как счас в хроме "Просмотреть код" показывается код) Он показывается свернутым в начале)
 
User_mt5:


Пример я обозначил.
Множество мелких функций скрывают код. Я же предпочитаю видеть как можно больше одновременно.
Может потому 32"-го дисплея мне уже маловато, хочу 48".

Боюсь, такой подход чреват ошибками. 

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

Такое нагромождение знаков (чтобы не влезало на монитор 32") - тебе же самому будет трудно разбирать, когда вернешься к этому коду через пару месяцев. А если еще и будут exit'ы из блоков, да еще и не выходящие совсем из функции, а выходящие из текущего блока - вдобавок начнутся еще и ошибки с опознанием конца блока. Десять раз просмотришь правильно, а на одиннадцатом - пропустишь скобку, и будешь смотреть на следующую. И, как назло, этот баг будет вылезать редко, и только при особых стечениях обстоятельств и начальных переменных. 

Как мне кажется, код должен быть как можно компактнее и проще. 


Ну и примера кода, показывающего удобство exit'a я не вижу. Можно меня носом в него ткнуть ?