Уважаемые разработчики! Планируете ли Вы добавить в MQL5 обработку исключений? - страница 2

 
Urain:

Про затычку согласен, ну а исключения по вашему не затычки? На форуме постоянно звучат слова что mql5 слишком сложен для понимания, так давайте ещё пиханём в него goto исключения и ещё кучу всяких анхронизмов, а ещё лучше перейдём на автокоды (это если помните были такие до ассемблера).

Вас никто не заставляет пользовать функцию как есть, запишите свой варинат исключения (те что нужно делать если идёт деление нулём) и пользуйте.

Что такое исключения - я написал постом выше. Простота языка определяется не тем, насколько мало в нем возможностей, а насколько просто в нем написать простой проект. Для нас потребителей важно, чтобы продукт мог соответствовать запросам совершенно разного уровня. Образно выражаясь, прикладник должен иметь возможность, начав с простой программки, развиваться постепенно в сторону более сложных вещей вроде ООП, исключений и прочего. Платформа должна это предоставлять. Насколько каждая конкретная фича нужна каждому конкретному прикладнику - пусть определит он сам. Если уж ратовать за простоту и ограниченность, то вообще к чему было городить MQL5? Введение ООП по сравнениею с исключениями - на порядки больший шок для неподготовленных программеров.

goto я не просил, не надо передергивать.

По поводу того, чтобы переписать функцию... Было ж сказано, что функция не везде может быть вставлена. Если шагнуть в сторону от деления на ноль, то даже представить сложно, какие навороты из функций потребуется ввести. Как в частности обезопасить обращения к массивам? Писать свой класс массива с проверкой сета и гета? Для каждого типа? И это упрощение для прикладника? Да нифига.

Вы предлагаете каждому прикладнику самостоятельно, подручными средствами реализовывать слабое подобие обработчиков исключений (часть ошибок они не перехвтатят)? А почему это не сделать один раз в самой платформе?

В общем, обсуждать нечего. Уровень разработки в среде МетаТрейдера задают разработчики самого МетаТрейдера.

 

stringo: ... проверять правильность данных перед их использованием и правильность результатов выполнения функций.

И про то, что для нормальных программистов исключения ненужны...

Странные утверждения...

По вашей логике, например, я в каждой программе в которой использую запись в файл должен сделать кучу проверок на наличие места,

прав доступа и т.д. ? Или запрашивая объект у внешнего сервиса должен все что можно проверить ?

Писать километры кода только потому, что вам лень ? Это бред.

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

А то, что вы скоро уже 3-й год не можете отладить свой, пусть и в общем неплохой велосипед, и при этом выдаете какие-то странные отмазки на различные вопросы...

Ну в общем оно не с лучшей стороны вас показывает...


С наилучшими пожеланиями и надеждой хотя бы в конце 2011 года увидеть МТ5 в реале...

Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 
Urain:Вас никто не заставляет пользовать функцию как есть, запишите свой варинат исключения (те что нужно делать если идёт деление нулём) и пользуйте.

Вообще мне вот (а я профессиональный программист) этот дурацкий пример с делением на ноль кажется как минимум странным: это как раз то место, где профессионал использовать исключения НЕ БУДЕТ. Вообще, исключения нужны несколько для другого - более чёткого структурирования программы, по типу "мухи отдельно - котлеты отдельно" и вовсе не для защиты от индусов они были придуманы!

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

Приведу несколько более наглядный пример... Допустим, у нас есть некоторая функция, которая читает данные из некоторого абстрактного источника данных, раскодирует её и передаёт вызывающей её функции. Теперь представим работу этой функции в двух вариантах, с обработкой исключений и без:

1.С обработкой исключений, основной код:

а) Создать требуемые ресурсы (например, генератор псевдослучайной последовательности чисел - мало ли как у нас строка закодирована?

б) Выполнить раскодирование строки

в) Освободить ресурсы.

г) Вернуть результат.

Код обработки ошибок: отсутствует. На самом деле он, скорее всего, будет представлен блоками кода try .. finally, в которые будут обёрнуты пункты б (выполняться внутри try .. finally) и в (внутри блока finally: выполниться в ЛЮБОМ случае, если будет возбуждено исключение - оно пойдёт дальше, если нет - выполнится пункт г). Больше никаких специальных телодвижений просто не требуется.

2.Без обработки исключений: Опа - сюрприз: мы должны знать какие ошибки могут возникнуть в источнике данных. :) Предусматриваем, например, возврат кода ошибки и строки комментария, или, в общем, случае, некоторого объекта, который описывает ошибку. Причём объект максимально абстрактный - мы не знаем что там. В результате мы должны предусматривать способ сообщить об ошибках:

а) Фатальных - нехватка памяти, например.

б) Источника данных - вообще не знаем что.

в) Собственных - в строке записан мусор.

г) И т.д.

Подумайте, что будет, когда через некоторое время потребуется сообщать о каких-то новых типах ошибок (обработка которых возможна неизвестно на каком уровне иерархии выше вашего кода) и для них придётся предусмотреть место в интерфейсе вашей функции, а потом поправить код во всех местах, где она используется.

У исключений возможны только два неприятных момента:

1. Реализация ректальным способом. Примеры: C++ (уничтожение статических объектов на стеке - это очень печальная история, которая имеет очень печальные последствия - сложность компилятора, требовательность к ресурсом и т.д. - тема для большой статьи), Java (требование указания возможно генерируемых исключений при определении функций - не намного лучше возврата кода всех на свете ошибок, но её можно обойти, что большинство людей и делают).

2.Индусы. Эти странные люди любят использовать исключения очень странными способами - например, не для обработки ошибок, а для передачи информации между уровнями кода. И да - это может быть проблемой для всех.

Так что лично я - за исключения. Без них всё сложное, что могло бы быть написано на MQL, будет писаться в DLL, как происходило и до сего дня - и никакое ООП этого не изменит. Печально, но факт.

Впрочем, я отлично понимаю, что никто никакие исключения в язык уже не добавит - и так планы горят. Что тоже, в общем, очень печально. :(

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

Святая наивность...

Люди, не желающие обрабатывать ошибки (думать и знать о них), пытаются отвернуться от них самообманом "исключения лучше, они позволяют не думать об ошибках". Таких не берут в космонавты.

В это теме недавно был удален очень точный комментарий.

 
Azzx:

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

Деление на ноль - самый простой пример исключения. Если уж нам часто не дано заранее знать, какие ошибки могут возникнуть в вызываемом коде, то в их числе может быть и деление на ноль. Не вижу смысла ломать общность подхода. А профессионалы что используют?
 
Renat:

Святая наивность...

Люди, не желающие обрабатывать ошибки (думать и знать о них), пытаются отвернуться от них самообманом "исключения лучше, они позволяют не думать об ошибках". Таких не берут в космонавты.

Наоборот, ошибки очень хочется обрабатывать, но удобным способом, а не топором из каменного века.
 
Renat:
.....

В это теме недавно был удален очень точный комментарий.

Я сам удалил свой пост, если Вы о нём.
 
marketeer:
Деление на ноль - самый простой пример исключения. Если уж нам часто не дано заранее знать, какие ошибки могут возникнуть в вызываемом коде, то в их числе может быть и деление на ноль. Не вижу смысла ломать общность подхода. А профессионалы что используют?
Проверки они используют там, где нужно. А там где не используют - значит там, по логике работы, просто не может возникнуть это исключение. Но вот если оно возникло - это серьёзная ошибка в логике работы, которую надо обязательно отлавливать. Т.е. это ошибка, собственно, программиста. А бывает другое - переполнение носителя данных, обрывы связи с сервером и т.п. - всё это штатные нормальные ситуации, которые программа, в общем случае, может корректно обработать. Вот в чём фокус.
 
Renat:

Святая наивность...

Люди, не желающие обрабатывать ошибки (думать и знать о них), пытаются отвернуться от них самообманом "исключения лучше, они позволяют не думать об ошибках". Таких не берут в космонавты.

В это теме недавно был удален очень точный комментарий.

угу! написал один индикатор на mql5 - нет проблем, написал мультивалютный индикатор - устал разгребать, добился жесткой синхронизации подкачки истории, но теперь на чарте индикатор или в лог пишет состояние или работает когда историю подкачает, но увы... - в тестере стратегий такое не прокатывает - один раз индикатор может работать , а может и не работать - выдавать ошибку "Array out of range" использую 4 буфера индикатора для расчета данных и один для прорисовки,.

смущает ситуация, что индикатор полурабочий получился - не работал бы - ну и лан, попытался ставить проверки на выход за пределы массива - осознал, что массив для рассчетов(INDICATOR_CALCULATIONS) за меня распределяет mql,  решил использовать просто динамические массивы, но благо спохватился, и решил всю работу с массивами тупо вынести в dll на Delphi

интересная ситуация - работать с dll на mql5 стало комфортно, а вот на самом mql полной комфортности чет не видно - зачем урезать возможности базового языка - С++ в mql?????

Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов
Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов
  • 2010.05.17
  • Alexey Klenov
  • www.mql5.com
В последнее время возрос интерес к кластерному анализу рынка FOREX. MQL5 открывает новые возможности исследования закономерностей движения валютных пар. Важным преимуществом MQL5, по сравнению с MQL4, является возможность использования неограниченного количества индикаторных буферов. В данной статье описан пример построения мультивалютного индикатора.
 

прекрасно понимаю, что на форуме разработчиков банальный юзер изначально ламер, но обидно если ламеры начнут заполнять кодобазу недостающими ф-циями от МТ4

пока вижу как минимум iMaOnArray()  и пр. от МТ4, да и чет нехватает банального сдвига массива на один эл-т вправо/влево, да и тяжело контролировать подгрузку данных в мультивалютных индикаторах

к чему пишу - к тому, что студент 1-го курса технического ВУЗ может написать эти ф=ции на стороннем языке, но увы, разработчики не могут дать полного ф-ционала от терминала, но вместе с тем они могут сделать ограничения, которые по их мнению имеют основания

суть поста - спс за mql5 - но она далека от народной платформы где народ может искать счастья в ДЦ, а если mql5  создавалась как платформа для профессионалов, тогда зачем долбанутые отграничения?

ЗЫ:(интересно, и чегоэт так получилось, что даже на Аль...и МТ5 не видно сразу на главной для скачивания) 

Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов
Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов
  • 2010.05.17
  • Alexey Klenov
  • www.mql5.com
В последнее время возрос интерес к кластерному анализу рынка FOREX. MQL5 открывает новые возможности исследования закономерностей движения валютных пар. Важным преимуществом MQL5, по сравнению с MQL4, является возможность использования неограниченного количества индикаторных буферов. В данной статье описан пример построения мультивалютного индикатора.
Причина обращения: