Когда-то Артём писал мне этот класс. Я в подробностях объяснить как работает не могу. Но Артём увидев вспомнит и сможет объяснить. В общем вот сам класс
//+------------------------------------------------------------------+//| CNewBar Time Возвращает время нулевого бара |//+------------------------------------------------------------------+datetime CNewBar::Time(void)
{
datetime array[1], ret;
ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
return(array[0]);
}
Алексей, спасибо за столь развернутый ответ. В приведенном фрагменте кода непонятно назначение переменной ret... Для чего она вычисляется, если в любом случае метод возвращает array[0] ? З.Ы. А для чего в методе класса использовать this ? Мы ведь работает с членами этого конкретного класса...
Ненавижу оператор continue; и стараюсь им не пользоваться. Исключительно в безвыходных случаях.
чем отличается от
Другое дело если при ошибке удалить несостоявшийся указатель… Но и тут можно обойтись без ненавистного мне continue; просто удалив Print(). Он был нужен во время отладки и попытки понять происходящее, а если во время работы произойдёт какая-то ошибка, я по любому не пойму что не так… Мне проще переустановить ОС, чем разобраться в логах.
Раз уж пошёл разговор об этом, расскажи пожалуйста, только не влезая в дебри, чем отличается указатель от переменной класса и что предпочтительней. В подробностях, в таких которые понять сложно я могу в тырнете почитать. Мне достаточно, так сказать, поверхностного понимания…
Я стараюсь избавиться от лишних скобок - чтобы не городить лесенок и ветвлений. Без принта там и скобки не нужны - останется просто удаление объекта.
По оператору new ты создаёшь некий механизм, который физически лежит "где-то". Оператор new возвращает адрес этого "где-то". И только по нему ты можешь обратиться именно к этому "механизму".
Алексей, спасибо за столь развернутый ответ. В приведенном фрагменте кода непонятно назначение переменной ret... Для чего она вычисляется, если в любом случае метод возвращает array[0] ?
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
Artyom Trishkin: Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
Итерацию цикла не закончит и новую не начнет, а перейдет к следующему Иф. Логика поменяется.
Нет. Там условие изначально поставлено так, если указатель создан успешно, то добавить его в список. Кривая скобка закрыта и если произошёл сбой, то просто добавление не будет выполняться. А с оператором continue; логика чуток другая, но результат тот-же.
Artyom Trishkin: Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
//+------------------------------------------------------------------+//| CNewBar Time Возвращает время нулевого бара |
//+------------------------------------------------------------------+datetime CNewBar::Time(void)
{
datetime array[1], ret;
ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
return(array[0]);
}
//+------------------------------------------------------------------+//| CNewBar IsNewBar Основная функция класса |//+------------------------------------------------------------------+bool CNewBar::IsNewBar(void)
{
datetime tm = this.Time();
if(tm == 0)
returnfalse;
if(tm != this.m_time)
{
this.m_time = tm;
returntrue;
}
returnfalse;
}
Артем, а для чего здесь используется ключевое слово this ? Ведь и без него методы будут работать с членами класса...
Алексей, спасибо за столь развернутый ответ. В приведенном фрагменте кода непонятно назначение переменной ret... Для чего она вычисляется, если в любом случае метод возвращает array[0] ? З.Ы. А для чего в методе класса использовать this ? Мы ведь работает с членами этого конкретного класса...
Поскольку функция CopyTime возвращает значение, то пусть возвращает в переменную, от этого хуже не будет… В случае отладки можно будет проверить что получилось.
this писал Артём. Видимо это личные предпочтения. Некоторые, надо — не надо пишут ::
ps; Я только сейчас заметил что тип переменной ret datetime… Конечно должна быть типа int. Ну да ладно, тоже надо будет исправить…
Поскольку функция CopyTime возвращает значение, то пусть возвращает в переменную, от этого хуже не будет… В случае отладки можно будет проверить что получилось.
this писал Артём. Видимо это личные предпочтения. Некоторые, надо — не надо пишут ::
2. М.б. Артем ответит про this - это личные предпочтения или обязательно нужно ?
Не нравится CopyTime(), замените на iTime(). Нет никакой разницы, главное получить время текущего бара.
В моей голове смутно всплывает воспоминание о том когда это писалось. Кажется и я задавал этот вопрос… И если ничего не путаю, то this гарантирует, что обращение будет только к здешним методам в случае если одноимённые есть в других классах. И конечно, уточнит Артём.
Когда-то Артём писал мне этот класс. Я в подробностях объяснить как работает не могу. Но Артём увидев вспомнит и сможет объяснить. В общем вот сам класс
Алексей, спасибо за столь развернутый ответ.
В приведенном фрагменте кода непонятно назначение переменной ret...
Для чего она вычисляется, если в любом случае метод возвращает array[0] ?
З.Ы.
А для чего в методе класса использовать this ? Мы ведь работает с членами этого конкретного класса...
Спасибо. Я понял, исправлю на так…:)))
Ненавижу оператор continue; и стараюсь им не пользоваться. Исключительно в безвыходных случаях.
чем отличается от
Другое дело если при ошибке удалить несостоявшийся указатель… Но и тут можно обойтись без ненавистного мне continue; просто удалив Print(). Он был нужен во время отладки и попытки понять происходящее, а если во время работы произойдёт какая-то ошибка, я по любому не пойму что не так… Мне проще переустановить ОС, чем разобраться в логах.Раз уж пошёл разговор об этом, расскажи пожалуйста, только не влезая в дебри, чем отличается указатель от переменной класса и что предпочтительней. В подробностях, в таких которые понять сложно я могу в тырнете почитать. Мне достаточно, так сказать, поверхностного понимания…
Итерацию цикла не закончит и новую не начнет, а перейдет к следующему Иф. Логика поменяется.
Алексей, спасибо за столь развернутый ответ.
В приведенном фрагменте кода непонятно назначение переменной ret...
Для чего она вычисляется, если в любом случае метод возвращает array[0] ?
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
М.б. Алексей расскажет)
Итерацию цикла не закончит и новую не начнет, а перейдет к следующему Иф. Логика поменяется.
Artyom Trishkin:
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.
Артем, а для чего здесь используется ключевое слово this ? Ведь и без него методы будут работать с членами класса...
Алексей, спасибо за столь развернутый ответ.
В приведенном фрагменте кода непонятно назначение переменной ret...
Для чего она вычисляется, если в любом случае метод возвращает array[0] ?
З.Ы.
А для чего в методе класса использовать this ? Мы ведь работает с членами этого конкретного класса...
- Поскольку функция CopyTime возвращает значение, то пусть возвращает в переменную, от этого хуже не будет… В случае отладки можно будет проверить что получилось.
- this писал Артём. Видимо это личные предпочтения. Некоторые, надо — не надо пишут ::
ps; Я только сейчас заметил что тип переменной ret datetime… Конечно должна быть типа int. Ну да ладно, тоже надо будет исправить…1. А для чего здесь функция CopyTime ?
2. М.б. Артем ответит про this - это личные предпочтения или обязательно нужно ?
1. А для чего здесь функция CopyTime ?
2. М.б. Артем ответит про this - это личные предпочтения или обязательно нужно ?
Не нравится CopyTime(), замените на iTime(). Нет никакой разницы, главное получить время текущего бара.
В моей голове смутно всплывает воспоминание о том когда это писалось. Кажется и я задавал этот вопрос… И если ничего не путаю, то this гарантирует, что обращение будет только к здешним методам в случае если одноимённые есть в других классах. И конечно, уточнит Артём.