return NULL

 

Добрый день! 

Знакомился на досуге с библиотекой, представленной на сайте.

Натолкнулся на следующий код

COrder* CEngine::GetLastOrderPosition(const ulong position_id)
  {
   CArrayObj* list=this.GetListAllOrdersByPosID(position_id);
   if(list==NULL) return NULL;
   list.Sort(SORT_BY_ORDER_TIME_OPEN);
   COrder* order=list.At(list.Total()-1);
   return(order!=NULL ? order : NULL);
  }

Хотелось бы спросить, зачем делать проверку на NULL и если объект действительно NULL, то возвращать NULL? ))

 

Там проверка на Не NULL, то сделать NULL, 

А ну выше действительно на равность проверка, и внизу почти тоже самое, на первый взгляд можно сразу NULL возвращать без кода)

 
awsomdino:
Там проверка на Не NULL, то сделать NULL

?? https://www.mql5.com/ru/docs/basis/operators/ternary

Допустим в последней строке еще можно так подумать, а что со строкой

if(list==NULL) return NULL;

)) 

Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
Документация по MQL5: Основы языка / Операторы / Условный оператор ?:
  • www.mql5.com
В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool. Если результат равен , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void. Результатом...
 
Nikolai Karetnikov:

?? https://www.mql5.com/ru/docs/basis/operators/ternary

Допустим в последней строке еще можно так подумать, а что со строкой

)) 

  if(list==NULL) return NULL;

если не равно NULL, return NULL ; пропускается и идем дальше

 
awsomdino:

Там проверка на Не NULL, то сделать NULL, 

А ну выше действительно на равность проверка, и внизу почти тоже самое, на первый взгляд можно сразу NULL возвращать без кода)

так нет же ш, нет? )))

я интерпретирую последнюю строку как

"если order не равен NULL, то вернуть order, иначе вернуть NULL", т.е. можно просто написать "вернуть order"

запись order : NULL 

это не присвоение, а выбор из двух альтернатив

 
лучше пойду телевизор посмотрю
 
Nikolai Karetnikov:

Добрый день! 

Знакомился на досуге с библиотекой, представленной на сайте.

Натолкнулся на следующий код

Хотелось бы спросить, зачем делать проверку на NULL и если объект действительно NULL, то возвращать NULL? ))

Метод возвращает указатель на объект. Если список ордеров позиции получить не удалось - возвращаем NULL, или если указатель на ордер из полученного сортированного по времени открытия ордеров списка получить не удалось, то возвращаем NULL.

В программе проверяем результат возврата на NULL. Если NULL, то ордер не получен.

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

ЗЫ. Такие вопросы нужно задавать напрямую в обсуждении статьи, а не на форуме гадать - быстрее ответ будет.

Строка

return(order!=NULL ? order : NULL);

означает буквально следующее: если указатель не равен NULL, то возвращаем указатель, иначе - NULL

 
Artyom Trishkin:

Метод возвращает указатель на объект. Если список ордеров позиции получить не удалось - возвращаем NULL, или если указатель на ордер из полученного сортированного по времени открытия ордеров списка получить не удалось, то возвращаем NULL.

В программе проверяем результат возврата на NULL. Если NULL, то ордер не получен.

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

ЗЫ. Такие вопросы нужно задавать напрямую в обсуждении статьи, а не на форуме гадать - быстрее ответ будет.

Строка

означает буквально следующее: если указатель не равен NULL, то возвращаем указатель, иначе - NULL

спасибо! Этого я и не осознавал. Возвращается указатель, а не пустой объект )

 
Nikolai Karetnikov:

спасибо! Этого я и не осознавал. Возвращается указатель, а не пустой объект )

Указатель возвращается только в случае успешного его получения. Иначе - NULL.

 
Nikolai Karetnikov:

?? https://www.mql5.com/ru/docs/basis/operators/ternary

Допустим в последней строке еще можно так подумать, а что со строкой

)) 

Последнюю строку вполне можно заменить на

return order;

Строка:

if( list == NULL )return NULL;

необходима, так как дальше будет обращение к объекту по этому указателю.

 
Koldun Zloy:

Последнюю строку вполне можно заменить на

Строка:

необходима, так как дальше будет обращение к объекту по этому указателю.

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

Артем, все-таки )

запись в конце 

return(order!=NULL ? order : NULL);

будет равноценна записи 

return(order)

или нет? 

Из вашего поста я сделал вывод, что пустой указатель это не NULL, а следовательно записи не равноценны

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