
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Честно пытался понять философию использования исключений - но так и не понял. Даже если оставить за бортом, то что исключения сильно тормозят все равно остается много но.
Больше всего мне не понятно следующее: программа выполняется от точки А к точке Б. Каким бы ни был алгоритм метода, если мы вошли в него в точке А, мы должны будем выйти из него из точки Б. Но с исключениями вдруг становится все по-другому, и мы выходим из программы где-то в непонятном месте catch, а затем программа пытается вернуться в какое-то следующее непонятное состояние. Т.е. параллельно рабочему алгоритму, мы создаем какой-то дополнительный черный вход, который непоянтно когда открывается и непонятно куда ведет. Все это очень сильно напоминает goto и те проблемы, которые он в себе несет.
Второй аргумент. Любая часть программы имеет только одну конкретную реализацию. Алгоритм в программе только один. Он может быть либо выполнимым, либо нет. Есть реально бесконечное множество вариантов неправильного выполнения алгоритма, и только один правильный вариант его выполнения. С помощью исключений нам предлагается перескочить с дорожки единственно правильного выполнения в бесконечное множество сбоев, ошибок и причин, из-за которых наш код вдруг стал выполнятся с ошибкой. Спрашивается, что мы будем искать в этом множестве? И даже если на бесконечном пространстве решений мы найдем нужную ошибку, что мы с ней будем делать?
Все это очень сильно напоминает goto и те проблемы, которые он в себе несет.
Да, в некоторых программах которые мне встречались так и использовалось:
1. Создаются собственные классы исключений.
2. При определенных ситуациях (не критических, заметьте) бросается нужный тип исключения. throw new SignalOpenException()
3. Он ловится снаружи в try catch и программа выполняет другую ветку логики.
Т.е. такой архитектурный хак, позволяющий в любой удобный момент вылететь из текущего потока выполнения и передать данные о ситуации/вычислении в объекте исключения. Т.е. это не всегда способ обработки ошибки, а эдакий событийный паттерн. Но реализация пользовательских событий уже поддерживается в MQL.
Полезность эксепшенов также может быть при необходимости реализовать корректный откат изменений. Вы инициировали какую либо процедуру - она по определенным причинам не завершилась, например делаете цепочку действий, пишете один файл, второй, третий, на четвертом файле - проблемы. Вы передаете причины проблем в объекте исключения, ловите это исключение, логируете причины, прибираете за собой - удаляете уже созданные 1,2,3 файлы.
Например на 4 шаге возникли проблемы временного характера, пропал интернет и запрашиваемая страница для парсинга недоступна. А далее как угодно, проанализировав причину, программа может дождаться появления интернета и инициирует новую процедуру.
Честно пытался понять философию использования исключений - но так и не понял. Даже если оставить за бортом, то что исключения сильно тормозят все равно остается много но.
Больше всего мне не понятно следующее: программа выполняется от точки А к точке Б. Каким бы ни был алгоритм метода, если мы вошли в него в точке А, мы должны будем выйти из него из точки Б. Но с исключениями вдруг становится все по-другому, и мы выходим из программы где-то в непонятном месте catch, а затем программа пытается вернуться в какое-то следующее непонятное состояние. Т.е. параллельно рабочему алгоритму, мы создаем какой-то дополнительный черный вход, который непоянтно когда открывается и непонятно куда ведет. Все это очень сильно напоминает goto и те проблемы, которые он в себе несет.
Второй аргумент. Любая часть программы имеет только одну конкретную реализацию. Алгоритм в программе только один. Он может быть либо выполнимым, либо нет. Есть реально бесконечное множество вариантов неправильного выполнения алгоритма, и только один правильный вариант его выполнения. С помощью исключений нам предлагается перескочить с дорожки единственно правильного выполнения в бесконечное множество сбоев, ошибок и причин, из-за которых наш код вдруг стал выполнятся с ошибкой. Спрашивается, что мы будем искать в этом множестве? И даже если на бесконечном пространстве решений мы найдем нужную ошибку, что мы с ней будем делать?
Но с исключениями вдруг становится все по-другому, и мы выходим из программы где-то в непонятном месте catch
На самом деле место catch очень даже понятное, если его программист поставил. А вот с критическими ошибками как раз так как вы сказали, нас выкидывают из программы через окно 12 этажа, побросав всю работу и не убрав за собой мусор.
Другое дело, что критических ошибок не так много, поэтому особого смысла в таком использовании исключений нет.
DLL я писать умею, зачем мне статьи.
Статья и не для Вас. Только как пример позиции MQ по этим вопросам.
Кстати, как только мы уходим в DLL, обратно выходить уже нет никакой необходимости. Только для передачи торговых поручений.
Кто тут увлекается исключениями? Если в формуле одно деление на 0, есть ли выигрыш от использования try-catch вместо одного if?
try
{
signal = Threshold/filtSig0() + Threshold/filtSig1() + Threshold/filtSig2() + Threshold/filtSig3() + Threshold/filtSig4() + Threshold/filtSig5() + Threshold/filtSig6() + Threshold/filtSig7();
if(signal > openThreshold)
OpenNewOrder(....)
}
catch
{}
Статья и не для Вас. Только как пример позиции MQ по этим вопросам.
Кстати, как только мы уходим DLL, обратно выходить уже нет никакой необходимости. Только для передачи торговых поручений.
try
{
signal = Threshold/filtSig0() + Threshold/filtSig1() + Threshold/filtSig2() + Threshold/filtSig3() + Threshold/filtSig4() + Threshold/filtSig5() + Threshold/filtSig6() + Threshold/filtSig7();
if(signal > openThreshold)
OpenNewOrder(....)
}
catch
{}
Вопрос был более конкретный: сравнение одного try/catch с одним if.
Если 8-мь делений, то 8-мь if, тут конечно if проиграет. А вот 1:1 как?
Просто у меня деление - это редчайшее явление и если бывает, то не больше 1-го в одном месте.