Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вложенные циклы в отдельную функцию, и можно даже без break обойтись.
В вашем первом сообщении о количестве вложенных циклах не было не слова. Естественно в данном случае одного оператора break будет мало. Но можно и цикл организовать по другому.
Спасибо за пример.
Но он показывает, как за исключение возможности перехода GOTO в языке приходится платить противоестественной труднопонимаемой заменой этого перехода на несколько операторов и даже функций. Кстати, текущее значение переменной цикла в func2 необходимо еще передавать в func1, иначе это циклы не вложенные, а независимые. Превратить один GOTO в 15 строк - извините, и слов-то не подберу. И все ради никак не определенного "считается плохим стилем"...
"Выскочить из вложенного цикла" - по-моему, ясно, что циклов как минимум два. Об этом и говорит слово "вложенный".
Вложенные циклы в отдельную функцию, и можно даже без break обойтись.
Спасибо за пример.
Но он показывает, как за исключение возможности перехода GOTO в языке приходится платить противоестественной труднопонимаемой заменой этого перехода на несколько операторов и даже функций. Кстати, текущее значение переменной цикла в func2 необходимо еще передавать в func1, иначе это циклы не вложенные, а независимые. Превратить один GOTO в 15 строк - извините, и слов-то не подберу. И все ради никак не определенного "считается плохим стилем"...
"Выскочить из вложенного цикла" - по-моему, ясно, что циклов как минимум два. Об этом и говорит слово "вложенный".
Конечно кол-во строк кода увеличивается, тут не поспоришь. Но понятливость кода от этого хуже не стала. По крайней мере для меня.
Так ведь return; тоже оператор безусловного перехода. Именно поэтому в самом конце функции его можно не проставлять.
В конце функции надо запихнуть оператор return() иначе MT не хочет компилировать. Например такой код:
будет ошибка, что не все части кода возвращают значение.
Интересно, а как эти счастливчики обходятся без условных операторов, которые и означают переходы по метке (метка "ELSE", метка "{" и т.д.)?
Иногда, и часто, проще написать без меток, но иногда проще и надежнее с метками. Например, выскочить из вложенного цикла.
На мой взгляд, вложенный цикл лучше организовывать с помощью функций (и оператора break).
Не думаю, что вариант с оператором GOTO будет лучше (нагляднее, удобнее). По мне - удобнее - как раз отдельные функции.
В общем само понятие "Структурное программирование" принципы которого были изложены в 70-х годах Дейкстрой исключает применение оператора goto.
Конечно кол-во строк кода увеличивается, тут не поспоришь. Но понятливость кода от этого хуже не стала. По крайней мере для меня.
В конце функции надо запихнуть оператор return() иначе MT не хочет компилировать. Например такой код:
будет ошибка, что не все части кода возвращают значение.
Справочник MQL4 / Основы языка / Операторы / Оператор возврата return
В функциях с типом возвращаемого значения void необходимо использовать оператор return без выражения:
void SomeFunction()
{
Print("Hello!");
return; // этот оператор можно удалить
}
Завершающая фигурная скобка функции предполагает неявное исполнение оператора return без выражения.
Справочник MQL4 / Основы языка / Операторы / Оператор возврата return
В функциях с типом возвращаемого значения void необходимо использовать оператор return без выражения:
void SomeFunction()
{
Print("Hello!");
return; // этот оператор можно удалить
}
Завершающая фигурная скобка функции предполагает неявное исполнение оператора return без выражения.
Я имел в виду функции которые возвращают какие либо значения, а void функция по сути процедура не возвращает ни каких значений по этому return, там не нужен.
Так ведь return; тоже оператор безусловного перехода. Именно поэтому в самом конце функции его можно не проставлять.
Не верьте никому.
Есть комбинаторные алгоритмы, где с применением goto, программа становится более компактнее, короче и ясно.
Правильно говорят что goto опасная штучка, но только для тупых программистов.
В общем само понятие "Структурное программирование" принципы которого были изложены в 70-х годах Дейкстрой исключает применение оператора goto.
Книжка Дейкстры "Дисциплина программирования" у меня лежит где-то с 1980, но вспомнить из нее что-либо, достойное упоминания, не смог. Сейчас книгу не нашел. Погуглил, нашел смешные вещи:
"Когда советское правительство приняло решение о переходе советской промышленности к копированию модельного ряда IBM/360, Дейкстра (работавший в то время в конкурировавшей с IBM фирме Burroughs) назвал это решение величайшей победой Запада в холодной войне, а выбранную для клонирования модель IBM/360 (прообраз советской ЕС ЭВМ) — величайшей диверсией Запада против СССР[8]."
"Дейкстра последовательно отстаивал необходимость математического подхода к программированию, который предполагает предварительное точное, всестороннее математическое описание задачи и способа её решения, формальное доказательство правильности выбранного алгоритма и последующую реализацию алгоритма в виде максимально простой, структурированной программы, корректность которой должна быть формально доказана."
Не вижу смысла искать у Дейкстры (противника, выходит, архитектуры IBM PC персональных компьютеров 1980-2017 г.г.) руководства к действию. Или кто-то на этом форуме стремится формально доказывать корректность своих программ? А перед этим формально доказывать правильность выбранного алгоритма? Какое, собственно, нам дело до того, что GOTO мешал Дейкстре создавать красивые теории по корректности алгоритмов и формальному доказательству корректности программ?
Очевидно, что он развивал теорию. А у теорий есть много таких свойств, которые противопоказаны практике. Как пример (вспомнил из Дисциплины программирования) - Дейкстре для изложения своих идей не подошел ни один язык программирования, ему пришлось в книге завести свой псевдоязык.