Респект и уважуха создателям языка, Но... - страница 4

 
Rosh:
Приведите пример, пожалуйста, как Вы подали на вход функции StringToDouble  неправильное число и что получилось в итоге. Просто хочется увидеть в чем состоит претензия.
   Print(StringToDouble("F34G")); = 0
   Print(StringToDouble("34G")); = 34
   Print(StringToDouble("GGG")); = 0
   Print(StringToDouble("Fignya")); = 0
   Print(StringToDouble("Фигня")); = 0
   Print(StringToDouble("Фигня1")); = 0

   Print(StringToDouble("1Фигня")); = 1

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


 

cpp.forex:

Претензия состоит в том, что обычно все эти примеры в других языках были-бы ошибочны.

Это не так.

Для примера возьмите С/C++ и в них поведение функций atof() именно такое, как и в MQL4/MQL5. Если на входе мусор, то результат 0 без выставления ошибок, символы распознаются до первого ошибочного.

 
cpp.forex:
   Print(StringToDouble("F34G")); = 0
   Print(StringToDouble("34G")); = 34
   Print(StringToDouble("GGG")); = 0
   Print(StringToDouble("Fignya")); = 0
   Print(StringToDouble("Фигня")); = 0
   Print(StringToDouble("Фигня1")); = 0

   Print(StringToDouble("1Фигня")); = 1

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



Тут думаю, вопрос решается проще (на первый взгляд). Нужно перед тем как дать параметр в StringToDouble() проверить его на корректность, вот как это сделать это вопрос.

В VB, если мне не изменяет память есть ряд функций проверяющих параметры на корректность, организовать проверку самостоятельно (скажем при помощи IsDouble не составит труда даже начинающему программеру)...


PS

Другое дело это с косяком в виде десятичного знака

 
Interesting:


Другое дело это с косяком в виде десятичного знака

Это не косяк, хотя мы можем автоматически заменять запятые на точки, если в строке нет точек.

Такой способ автоматически решит вопрос разных форматов.

 
Renat:

Это не косяк, хотя мы можем автоматически заменять запятые на точки, если в строке нет точек.

Такой способ автоматически решит вопрос разных форматов.

Ну так это давно нужно было сделать, а то "разделение запятыми"... (хорошая отмазка) :)
 

При таком глубоком подходе к StringToDouble намного проще написать свою функцию разбора string'a в double  - размер кода несколько десятков строк

 


функция SetIndexBuffer()

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

Но когда дело доходило до написания экономных по производительности индикаторов, то зачастую можно было мозги свихнуть, так как приходилось организовывать циклы по убыванию с вычислением нетривиальных начальных значений для счетчика в цикле. Поэтому было решено сделать так, чтобы было удобно писать и отлаживать именно индикаторы. Если же Вам привычней обратная индексация, то это всегда можно изменить функцией ArraySetAsSeries. Уверен, после небольшой практики Вы найдете такой способ индексации индикаторных буферов более удобным, сужу по своему опыту

maybe, maybe mql5
 
велик и загадочен mql5

 
CoreWinTT:  велик и загадочен mql5

а почему не сделать как то проще.. после mql4 ето шаг в сложности, и далеко не шаг вперед.. может в вычислительной мощности и вперед. хотите вычислительной мощности.. так сразу включите поддержку С++ и на том поставте жырную точку, и на людях тоже. ! Но если учесть что 95% трейдеров, как правило, априори не программисты (им приходиться ими ставать) то ето явно шаг назад. нужно делать еще проще чем в mql4, еще доступней, еще понятней, еще визуальней, еще наглядняй.. в результате залезли в дебри, где сам чорт ногу сломает. человек, не изучавший любого языка програмирования, стает в тупик через 30 секунд после открытия редактора.. и начинаються вечное брожение по форумах, вскрывание чужых индикаторов и експертов, чтоб хоть как то реализовать казалось бы простую и елементарную торговую идею. .. крик души просто.. полез я дальше по форуму искать кусочки кода, а то в справочнике без высшего математического образования ничего не понять. (а потом получаешь ответы на форуме.. юзай поиск, юзаю.. не помогает)

 p.s. Закон пропорциональности: Чем больше программа, тем больше в ней ошибок. (Закон Мерфи)

Ошибка? Это не ошибка, это системная функция. (Т. Джон Уэнделл) 

 

 

Ну мое мнение относительно нового языка MQL5 - Мне нравиться что возможностей больше, сколько бы не говорили, но с++ легкий язык, а с ООП размер программы обратно пропорционален ее сложности.

Делать MQL5 более простым чем MQL4 - это шаг назад в производительности и ограничение возможностей настоящего программиста.
А дилетант в программировании чуток почитав учебники по С++ сможет комфортно программировать на MQL5, и в то же время профессионалам есть где развернуться.
Приведу пример программа "Ру**с" - на их языке даже в детсаде можно программировать, а итог - медленно и кроме простейших программ ни чего не напишешь.

Пройдет немного времени и появятся всякие классы для MQL5 упрощающие часто-употребляемые операции, и будет MQL5- простым языком.


P.S. "Превратим баги в фитчи))" - с какого-то форума.

Причина обращения: