- Что делать с убыточными позициями?
- Какие новости самые волатильные
- Введение в MQL5 механизма обработки исключений - нужно или нет?
Меня правда интересует, почему?
Язык активно развивается, runtime усложняется, скоро обещают сервисы и межпроцесное взаимодействие, а спасательного круга - исключений нет.
Сейчас любая ошибка типа деления на ноль приводит к краху программы. А ведь такая ошибка может возникнуть в любой момент не по вине программиста, ну, звезды так легли, такие параметры сложились, что получился ноль.
Знаю, знаю, сейчас старички МТ4-процедурнички заворчат, - иш чаво захотел окаянный, вот в наше время никаких таких сключений не было, а ужо писали программки-то, писали!!!
Меня правда интересует, почему?
Язык активно развивается, runtime усложняется, скоро обещают сервисы и межпроцесное взаимодействие, а спасательного круга - исключений нет.
Сейчас любая ошибка типа деления на ноль приводит к краху программы. А ведь такая ошибка может возникнуть в любой момент не по вине программиста, ну, звезды так легли, такие параметры сложились, что получился ноль.
Знаю, знаю, сейчас старички МТ4-процедурнички заворчат, - иш чаво захотел окаянный, вот в наше время никаких таких сключений не было, а ужо писали программки-то, писали!!!
Так как некоторые не знают, я приведу пример исключений, как они реализованы в C#, там поизящнее сделано, на мой взгляд, чем в С++.
Смысл исключений очень простой. Везде, где встречается участок кода, который потенциально может быть небезопасный, он заключается в блок
{
// потенциально небезопасный код
}
Если в блоке try возникает ошибка времени исполнения, например, деление на ноль, то вместо падения программы мы имеем вызов следующего за try блока catch
{
// какие-то действия в случае ошибки
}
finally //выполняется в любом случае
{
Console.WriteLine("Блок finally");
}
Блок finally необязательный, служит для выполнения завершающих действий, например, закрытия файла в случае файловой операции.
И теперь живой пример на C#, думаю, все будет понятно и чистым MQL-щикам.
{
// To run this code, substitute a valid path from your local machine
string path = @"c:\users\public\test.txt";
System.IO.StreamReader file = new System.IO.StreamReader(path);
char[] buffer = new char[10];
try
{
file.ReadBlock(buffer, index, buffer.Length); // читаем из файла блок данных, может быть ошибка
}
catch (System.IO.IOException e) // словили ошибку, как-то обработали, тут просто печать
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
finally // в любом случае закрываем файл
{
if (file != null)
{
file.Close();
}
}
// Do something with buffer...
}
Конечно, можно перед любой небезопасной операцией производить проверки. Но что, если этих проверок десятки или сотни, а вероятность ошибки одна на миллион? Мы резко теряем в быстродействии, да и писать такие проверки сущее мучение.
Гораздо комфортнее возложить обработку ошибок на механизм исключений.
Кстати, исключения есть не только в С++/C#, но даже в Matlab! (Привет Сан Санычу :) )
А вы прикажите вашему коду не делиться на 0. )

- www.mql5.com
Спасибо за ссылку.
Смысл ответов прост - раз у нас нет эксепшенов, значит они никому не нужны )) И почему-то все ответы уперлись в это деление на ноль, хотя это частный случай.
Ну-ну. Я редко ошибаюсь, если MQ все же сделают сервисы и межпроцессное взаимодействие, без эксепшенов предсказываю массовый падеж программ, их использующих.
Спасибо за ссылку.
Смысл ответов прост - раз у нас нет эксепшенов, значит они никому не нужны )) И почему-то все ответы уперлись в это деление на ноль, хотя это частный случай.
Ну-ну. Я редко ошибаюсь, если MQ все же сделают сервисы и межпроцессное взаимодействие, без эксепшенов предсказываю массовый падеж программ, их использующих.
Проголосовал - Нужны, почему нет - не знаю. Вообще-то еще многого нет и даже заранее известно, что много не будет. MQ сравнительно небольшая фирма. У них просто ресурсов не хватит. И еще, возможности совершенствования любого уже выпущенного ПО небезграничны и возможны только с изменением идеологии построения - а это уже следующее поколение.
Пример, та-же Виндовс Виста. Свежевыпущенная она еще более-менее работала. Но МС ее так замучил обновлениями, что она даже свежеустановленная и обновленная уже ползала с трудом.
А Если ексепшинить, то заэксепшенить всю программу надо, чего уж тут, ведь мало ли чего случится то может. Заэксепшенить всю программу, распечатать код на А4 бумаге и положить в ящик стола - так надёжнее, ничего не случится ни с кодом ни с деньгами на счете...
Конечно, можно перед любой небезопасной операцией производить проверки. Но что, если этих проверок десятки или сотни, а вероятность ошибки одна на миллион? Мы резко теряем в быстродействии, да и писать такие проверки сущее мучение.
Гораздо комфортнее возложить обработку ошибок на механизм исключений.
Кстати, исключения есть не только в С++/C#, но даже в Matlab! (Привет Сан Санычу :) )
Это специфический прикладной язык, от которого зависит состояние баланса счета.
Что важнее?
предусмотреть всевозможные проверки перед тем как допустить к реальным деньгам или рисковать счетом? особенно чужим и немаленьким
Если ПО падает - значит это хреново написанное ПО, а не отсутствие исключений.
А Если ексепшинить, то заэксепшенить всю программу надо, чего уж тут, ведь мало ли чего случится то может. Заэксепшенить всю программу, распечатать код на А4 бумаге и положить в ящик стола - так надёжнее, ничего не случится ни с кодом ни с деньгами на счете...

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования