
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Коды возврата кодами возврата, но это другой механизм и используется немного для разных целей.
По мне - разница невелика. Могу писать хоть с кодами возврата, хоть с исключениями, хоть и с тем и с другим вместе. Если код бросает исключения - то все равно нужен блок их отлова, когда надо высвободить занятые ресурсы или привести систему в "исходное" состояние. В коде нужно отслеживать места, которые могут генерировать исключения... На мой взгляд, особых преимуществ не дают.
В целом, согласен с мнением Dmitry Fedoseev'a - ""Вопреки верованиям некоторых адептов, не обладает мистической силой".
По мне - разница невелика. Могу писать хоть с кодами возврата, хоть с исключениями, хоть и с тем и с другим вместе. Если код бросает исключения - то все равно нужен блок их отлова, когда надо высвободить занятые ресурсы или привести систему в "исходное" состояние. В коде нужно отслеживать места, которые могут генерировать исключения... На мой взгляд, особых преимуществ не дают.
В целом, согласен с мнением Dmitry Fedoseev'a - ""Вопреки верованиям некоторых адептов, не обладает мистической силой".
Все удобство в том, catch блок может быть не сразу за местом образования исключения. Для примера:
Тут, я в любом месте кода могу кинуть исключение и не заботиться о прерывании алгоритма, кроме как в местах освобождения ресурсов, которые буду освобождать в таком-же catch блоке с дальнейшем пробросом исключения по стеку. Да, это можно сделать через возврат кодов ошибки, более того, исключения сколько-то стоят, но тут как везде, при разработке выбирается баланс. Исключения удобны и позволяют уменьшить количество багов. Так вот, и в с++, и в с#, и в куче других ЯП, выбор мне предоставлен, а тут...
В любом случае, уверен на 99%, что разработчики не станут реализовывать исключения. Они ориентируются на скорость кода, и не станут её снижать в угоду удобству.
В смысле? Они что, собирают терминал с отключенной поддержкой исключений? Ой, что-то не похоже. Как же подобное без краха терминала у них перехватывается?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Aliaksandr Hryshyn, 2021.08.22 11:18
Код отсюда:
https://www.mql5.com/ru/articles/2432
Ошибка при закрытии демки. Ошибка при отладке и при релизе.
Последняя бетта-версия терминала.
А если исключения в терминале живут, то почему бы и в mql это доброе не включить?
Все удобство в том, catch блок может быть не сразу за местом образования исключения. Для примера:
Тут, я в любом месте кода могу кинуть исключение и не заботиться о прерывании алгоритма, кроме как в местах освобождения ресурсов, которые буду освобождать в таком-же catch блоке с дальнейшем пробросом исключения по стеку. Да, это можно сделать через возврат кодов ошибки, более того, исключения сколько-то стоят, но тут как везде, при разработке выбирается баланс. Исключения удобны и позволяют уменьшить количество багов. Так вот, и в с++, и в с#, и в куче других ЯП, выбор мне предоставлен, а тут...
Все верно.
Но "в любом месте" - это значит, что приходится либо вставлять блоки CATCH() везде, что захламляет код, и не факт, что не замедляет работу, плюс напротив каждой функции писать в комментариях "//exception", чтобы видеть, какая из них может бросить исключение, а какая нет.
Для кодов возврата - ты анализируешь их только там, где они реально для тебя важны.
В целом, для меня разница невелика. Введут разработчики исключения - вероятно, буду их использовать. Не введут - обойдусь.
Все верно.
Но "в любом месте" - это значит, что приходится либо вставлять блоки CATCH() везде, что захламляет код, и не факт, что не замедляет работу, либо напротив каждой функции писать в комментариях "//exception", чтобы видеть, какая из них может бросить исключение, а какая нет.
Для кодов возврата - ты анализируешь их только там, где они реально для тебя важны.
В целом, для меня разница невелика. Введут разработчики исключения - вероятно, буду их использовать. Не введут - обойдусь.
Зачем же везде? Только там, где ресурсы надо явно освобождать. Поменьше new в методах и будет все проще и веселее)))
В смысле? Они что, собирают терминал с отключенной поддержкой исключений? Ой, что-то не похоже. Как же подобное без краха терминала у них перехватывается?
А если исключения в терминале живут, то почему бы и в mql это доброе не включить?
Все удобство в том, catch блок может быть не сразу за местом образования исключения. Для примера:
Тут, я в любом месте кода могу кинуть исключение и не заботиться о прерывании алгоритма, кроме как в местах освобождения ресурсов, которые буду освобождать в таком-же catch блоке с дальнейшем пробросом исключения по стеку. Да, это можно сделать через возврат кодов ошибки, более того, исключения сколько-то стоят, но тут как везде, при разработке выбирается баланс. Исключения удобны и позволяют уменьшить количество багов. Так вот, и в с++, и в с#, и в куче других ЯП, выбор мне предоставлен, а тут...
И гарантированно будете ловить утечки ресурсов.
Это беда всех программистов, ловящих эксепшены на уровнях выше. Для языков с garbage collector это не так сильно влияет(влияет), а вот для С++ подобных смертельно.
Поэтому у нас не будет эксепшенов в MQL5.
На эту тему было уже несколько обсуждений и объяснений. Холивар разводить не надо, это принципиальное решение.
Зачем же везде? Только там, где ресурсы надо явно освобождать. Поменьше new в методах и будет все проще и веселее)))
Если не везде - тогда надо за каждой функцией, бросающей исключение ставить комментарий "// exception", поскольку без него потом при добавлении кода в блок потребуется выяснять, какая функция кидает, а какая не кидает исключение.
Про "поменьше new" в местодах - смешно. Ты можешь и не знать, где там, в глубине стека вызовов будет он вызван.
Но, повторю - все это вполне преодолимые сложности, и проблемы, которые они несут с собой не более тех, что несут коды возврата. Поэтому я вовсе не против исключений. Будут они - хорошо. Не будет - тоже нормально.