На суд просвещённой публики. - страница 4

 
sergeev:

потому что верная фраза - это так как вы написали выше. согласно её это должнро быть написано так:

return(0) передаёт ноль. задает в общей ячейке функций значение 0.


Моя фраза насчёт return и return(0) высказанная в ветке новичков ошибки не содержит, а если я в своей фразе тогда не написал какие то подробности, то это моё право писать о них или нет. Отвечая на вопросы новичков я порой намерено даю краткие ответы, чтобы дать им возможность подумать самим, а не глотать разжёванное. Тогда проблема с которой они столкнулись запомнится надолго. В крайнем случае потом отвечаю на их дополнительные вопросы по этой проблеме.

sergeev:

исходя из этого можно сделать приближенный вывод, что return фактически есть тоже некая функция в трактовке MQL4. Которая помещает в этот "стек" свое значение.

это значение и будет использовано в качестве результата.

поэтому если return было использовано неверно (в стиле return; как для void функций) то и значение возьмется то что было там по результату последней функции. в примере верху сначала getTick а во втором MathAbs

Не согласен return(выражение) и return всё таки это операторы, которые прекращают действие функции и передают управление программе, которая вызвала эту функцию. А return(выражение) ещё и передаёт результаты работы функции, которая хранит их в буфере до момента выполнения какой то другой функции.

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

 
khorosh:

Отвечая на вопросы новичков я порой намерено даю краткие ответы, чтобы дать им возможность подумать самим, а не глотать разжёванное. Тогда проблема с которой они столкнулись запомнится надолго.

это правильно :).

return(выражение) и return всё таки это операторы, которые прекращают действие функции


возможно для MQL4 это тоже верное утверждение.

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

иначе будем мы с вами плутать еще очень долго.

 
khorosh:


Результат таков:

2014.01.07 22:32:14 2009.01.02 06:00 Pustoy EURUSD,M15: F2(0)=1

2014.01.07 22:32:14 2009.01.02 06:00 Pustoy EURUSD,M15: F2(1)=1

2014.01.07 22:32:14 2009.01.02 06:00 Pustoy EURUSD,M15: F1(0)=0

2014.01.07 22:32:14 2009.01.02 06:00 Pustoy EURUSD,M15: F1(1)=1

Как видим у функции F2(), в которой использовался оператор return ранее принятое значение функции = 1 не изменилось, поэтому можно сделать заключение, что этот оператор ничего не возвращает и не изменяет предыдущее значение функции. Ну а оператор return(0), как и ожидалось изменил значение функции на ноль, так как возвращает ноль.

Может я где то ошибся и имеются пробелы в логике, - прошу специалистов выражать своё мнение.


нечто подобное происходило (может и сейчас происходит) в массивах..

давненько это было еще на 4-х сотых билдах, в функции был объявлен массив типа double a[]; далее по коду его размер изменялся по одному из входящих параметров функции, а после был перебор в цикле по массиву и некоторые, но не все элементы массива изменялись.. инициализации элементов массива не было, т.к. предполагалось что double a[]; нули забивает ("назабивало")..

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

со строками тоже подобные баги были, вероятно с массивами вообще так..

так в привычку вошло всегда делать ресайз массиву в 0 перед тем как его использовать..

суть в том, что одно дело что мы думаем, а другое что на самом деле..

 
keekkenen:


они были и равны ранее заполненным значениям

были
в самом низу таблица
 
sergeev:
были
в самом низу таблица


а, ну значит память еще не подводит..

грабль датый в глаз надолго откладывается в голове

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