Зачем нужна проверка на NULL

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Здравствуйте

Насколько я помню неоднократно писалось:

Код: Выделить всё

MyObject &MyClass
 code
 MyObject &=new(MyClass)
при такой конструкции после создания объекта ОБЯЗАТЕЛЬНА проверка на MyObject &=NULL

Вопрос: зачем это нужно ?

Мое мнение: если по какой либо, абсолютно непонятной мне причине, объект не создастся, ну и черт с ним - здравствуй GPF. Если я обработаю проверку на NULL, т.е. буду знать - да действительно объект не создался - что мне дальше делать ? Писать мессагу для пользователя "Обратитесь к
разработчику" и вылетать по типо halt/stop ? А какая разница между моей мессагой и стд GPF ?

Почему возник вопрос: существует несколько объектов, которые необходимо последовательно создать, т.е.

Код: Выделить всё

MyObj1  &MyClass1 
MyObj2  &MyClass2 
MyObj3  &MyClass3 
 code
 MyObj1 &= new MyClass1  
 if ~(MyObj1 &=NULL)
    MyObj2 &= new MyClass2  
    if ~(MyObj2 &=NULL)
      MyObj3 &= new MyClass3 
      if ~(MyObj3 &= NULL)
       ... и тут наконец таки мой код
      end
    end
 end

не слишком ли много if ?

--
С уважением,
Still mailto:zero@clarionlife.net

а почему нельзя создать статические объекты?
не слишком ли много if ?
в кларе меньше не сделаешь.

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

Ник ваш зело соответствует теме вопроса, видать неспроста он родился :)

Проверять такие ситуации (проверка успешность создания после NEW) нужно только если хочешь точно знать место ошибки, запротоколировать например, или же ошибку создания такого объекта можно нормально обработать, например выдать мессагу и завершить процедуру. Вообще такое мало вероятно, только нехватка памяти, наверное.

Усиленно рекомендуется несколько иное, перед работой с рефералом проверить его на NULL. Он мог быть объявлен где-нить, а потом уничтожен или не инициализирован, вот такое гораздо более вероятно и выловить гораздо труднее, особенно если сырца нет, как в случае с RTL.

Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Написал: ClaList(2)
Гость

Сообщение Гость »

Как ты думаешь - какая разница между неожиданным вылетом проги по GPF БЕЗ сохранения данных, которые бедный юзер вбивал в документ или ждал несколько часов завершения месячного отчета И нормальным сообщением о возникшей ошибке с приглашением о сохранении данных?
В первом случае - о проге будут говорить как о "глючной", а во втором случае - комп иногда "глючит"! Есть разница?!
Кроме того, если GPF возникнет в какой-либо процедуре, то "слетит" вся программа, а во втором случае - просто будет невозможно выполнить какую-либо функцию в данный момент - возможно действительно не хватает памяти из-за запущенных в данный момент внешних "прожорливых" прог? Достаточно будет их выгрузить и посторить вызов процедуры - е все дела!

А еще, имхо, это - стиль программирования! Или слепо "лепить" программку без какой-либо обработки "пограничных" ситуаций, или ПОЛНОСТЬЮ контролировать ее выполнение, когда возникновение GPF - это ЧП, которое требует пристального разбора и принятия соответствующих выводов.
не слишком ли много if ?
А что тут такого? Лень что-ли писать?
Если часто приходится такой код писать, то оформи его или в виде отдельной процедурки или в виде внутренней рутинки.

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru

Написал: ClaList(2)
Ответить