Доброе утро
Нашел такой код в библиотеке:
На мой взгляд такой код эффективнее можно бы было реализовать при помощи ассоциативных массивов или словарей.
Но, ни того, ни другого в документации не нашел.
Доброе утро
Нашел такой код в библиотеке:
На мой взгляд такой код эффективнее можно бы было реализовать при помощи ассоциативных массивов или словарей.
Но, ни того, ни другого в документации не нашел.
Двойка тому кто писал. Конкретно для этого участка словарь не нужен. Вот более лаконичный вариант:
string TimeFrameToString(ENUM_TIMEFRAMES timeframe) { if(timeframe == PERIOD_CURRENT) timeframe = _Period; string strTimeframe = EnumToString(timeframe); return StringSubstr(strTimeframe, 7); }А вообще словарь и хеш-таблица - одни из фундаментальных и важнейших алгоритмов в программировании. Странно что их нет на уровне стандартной библиотеки.
Двойка тому кто писал. Конкретно для этого участка словарь не нужен. Вот более лаконичный вариант:
А вообще словарь и хеш-таблица - одни из фундаментальных и важнейших алгоритмов в программировании. Странно что их нет на уровне стандартной библиотеки.А что тогда вернёт эта функция в случае "нестандартного" периода?
void OnStart() { ENUM_TIMEFRAMES period=PERIOD_M30; period++; Print(TimeFrameToString(period)); } string TimeFrameToString(ENUM_TIMEFRAMES timeframe) { if(timeframe == PERIOD_CURRENT) timeframe = _Period; string strTimeframe = EnumToString(timeframe); return StringSubstr(strTimeframe, 7); }
А в языке mql5 вообще много чего "интересного" в стиле доработай напильником:
datetime FirstDateRAM(ENUM_TIMEFRAMES period=PERIOD_M1) { datetime time=0; while(!IsStopped()) { if(SeriesInfoInteger(Symbol(),period,SERIES_FIRSTDATE,time)) {break;} else {Sleep(1);} } return(time); }
А что тогда вернёт эта функция в случае "нестандартного" периода?
Проблема защиты перечислений - не проблема этой функции, а проблема языка в целом. Возвращаемое значение "?" столь же проблемно как и "MEMFRAMES::31"
А как же "внегласная концепция" разработчиков АТС - программировать в стиле параноика-писсимиста?!

Да уж, чётко сказано. Действительно, можно не задумываясь спокойно начинать каждую строчку с if
Вообще, такой класс был бы по теме в стандартной библиотеке. В том или ином виде он всё равно используется почти всегда. Напишите в сервисдеск, может сделают.
А как же "внегласная концепция" разработчиков АТС - программировать в стиле параноика-писсимиста?!
Если язык не строго типизирован то Вы хоть миллион проверок делайте но безопасность кода не повысите. Пример выше показателен. Первая версия функции "в случае чего" возвращает строку "?". Проблема в том что "?" не чуть не лучше "MEMFRAMES::31", т.к. и в том и в другом случае результат неопределен. Если эта строка будет в дальнейшем участвовать в важных преобразованиях то стабильное выполнение программы будет под вопросом, в лучшем варианте программа завершит работу аварийным сбоем, в худшем случае начнет время от времени проявляться странный глюк связанный с отображением тайфрейма.
Однако первый вариант любую "неопределённость" идентифицирует как "?" - и дальше программа можно сделать вывод об ошибке и принять "меры".
Второй же вариант будет возвращать для каждой "неопределённости" разное значение. Ошибку выловить будет трудно...
Однако первый вариант любую "неопределённость" идентифицирует как "?" - и дальше программа можно сделать вывод об ошибке и принять "меры".
Второй же вариант будет возвращать для каждой "неопределённости" разное значение. Ошибку выловить будет трудно...
string TimeFrameToString(ENUM_TIMEFRAMES timeframe) { if(!CheckValidEnum(timeframe)) return "?"; if(timeframe == PERIOD_CURRENT) timeframe = _Period; string strTimeframe = EnumToString(timeframe); return StringSubstr(strTimeframe, 7); }Но повторяю, проблему это не решает.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброе утро
Нашел такой код в библиотеке:
На мой взгляд такой код эффективнее можно бы было реализовать при помощи ассоциативных массивов или словарей.
Но, ни того, ни другого в документации не нашел.