Можно ли написать класс, который в случае неудачной инициализации

  • Автор темы Автор темы fedotxxl
  • Дата начала Дата начала
скажу честно, я даже себя ругаю часто за то, что использую много конструкций проверок даже результатов работы своего кода...
верю, что забываешь, многие забывают... и я тоже, но большинство обработчиков пишется на автомате уже...

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

обработка исключений - не нормальная практика, а требование к нормальному ПО!

кроме того, прошу заметить, что я не рекомендую и не настаиваю на предложенном мною решении, а всего лишь подаю информацию о возможности такой реализации, а кто как хочет так и использует...

о какой миграции речь? :unsure: ты хочешь сказать, что единственной проблемой при переносе кода является Nothing? :blink:
любой алгоритм можно реализовать на каждом конкретном языке по-разному, учитывая возможности оптимизации языка, поэтому говорить о прямом переносе кода без изменений не верно, как по мне...
 
если так хочется уточнить - переменная типа Object (или его производных)
и после декларации там уже присутствует Nothing (умолчально инициализируется)

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

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

да, вариант предложенный вами имеет право на жизнь (как возможность так сделать), но я, например, не вижу области его практического применения
 
често говоря я так и не понял сути : > Можно ли написать класс, который в случае неудачной инициализации, возвращал Nothing?

непонятен ход мысли автора..
1.если у нас нет данных, то и класс, который должен с этими данными что-то делать не нужен
2.если данные есть, то нужно использовать класс, а раз так, то нужно получить экземпляр класса, проверив был ли он создан ранее или создать новый экземпляр..

а раз так, то какой смысл в том, чтобы делать ничто из класса ???
 
Вот вам примерчик: класс DataBase.

вызов конструктора:
dim db as New DataBase(server, file)

проверка, открылась-ли база:
if db is Nothing then
...
end if
:unsure:
 
Constantin A Chervonenko
это плохой пример, потому что if не срабатывает..
 
товарищи, что-то вы загоняетесь все и очень глубоко!
вы уж извините, но придираетесь к чему-то чего на самом деле нет!

1 На самом деле "задолго" до конструктора, конструктор это только пользовательская чуть-ли не последняя стадия процесса. Тут все просто - вы же можете обращаться к внутренним полям, вот даже с указателем самого на себя, обращаетесь так жестоко, убиваете с его помощью самого себя на корню. А разве можно убить неродившееся?
2. У созданного обекта есть только одно состояние. Он создан и готов к использованию. я к чему .... не надо путать бизнес логику и физический процесс. Объект создан и все, а уж на сколько он инициализирован по отношению к реальной ситуации для данного момента программы, это совсем другая песня.
sax_ol, ты как понимаю великий и могучий разработчик компиляторов и линкеров, правда на .NET, гы-гы...
нотес не используешь, но постоянно пытаешься доказать, что ты прав, бо ты так делаешь, а так как ты делаешь, то самое правильное решение...
я тебе так отвечу
1) конечно задолго! ты бы еще сравнил это с объявлением обычных переменных и их инициализацию, когда память под них выделяется задолго до использования! понятно, что конструктор - конструкция, которая позволяет программисту выполнить нужные действия для инициализации "бизнес-логики" его объекта, а то, что перед этим в памяти будет занята куча места под поля и т.п. хню, то это работа которая не интересует программиста, пишущего класс.
2) объект либо есть, либо нет, если я могу вернуть nothing вместо объекта, то наверное это что-то невероятное? в любом случае это указывает на то, что объект после создания может иметь множество состояний!
я вообще ничего не путаю, в отличие от тебя, и отвечаю в теме по теме, а ты считаешь, что можешь ходить из темы в тему и доказывать свое одно и то же... удачи!

1.если у нас нет данных, то и класс, который должен с этими данными что-то делать не нужен
2.если данные есть, то нужно использовать класс, а раз так, то нужно получить экземпляр класса, проверив был ли он создан ранее или создать новый экземпляр..
ты говоришь так, как будто ты с помощью одного экземпляра класса обрабатываешь все данные, т.е. это объект-конвеер, который обрабатывает сразу все данные...
в том-то и дело, что если класс, который выполняет какие-то действия на данными, получает неверные данные, то он не будет их обрабатывать, соотв. экземпляр его не нужен в данный момент времени с этим набором данных, поэтому мы и не создаем его.
Constantin A Chervonenko привел реальный пример, который повсеместно используется при работе в Notes
другой аналогичный пример:

Код:
set NotesDoc = NotesDb.GetDocumentByUNID(docUnid)
if not(NotesDoc is nothing) then
' do somt
end if

если ты используешь подобную конструкцию, то правда ты не будешь заканчивать обработку тысячи документов на пятсот десятом?
ты напишешь обработчик исключения, который позволит тебе выполнить обработку всех данных, а именно:

Код:
on error 4091 resume next
...
set NotesDoc = NotesDb.GetDocumentByUNID(docUnid)
if not(NotesDoc is nothing) then
' do somt
end if

в этом случае, мы просто пропустим неправильный унид и обработаем следующий.


зы: ребята, вы вообще нотесом занимаетесь или все .NET? если вы не работаете с нотес, то чего вы даете советы в этом форуме?!!
если вас интересуют глобальные вопросы ООП, создания объектов и т.п. то чего вы сюда пришли? идите на форумы, где это обсуждается!
чего вы тут рассказываете, что мы тут все не правы, потому что используем эти конструкции?!!
Модератор: Ненадо указывать кому в каком форуме быть и про что говорить, и не узнаете дорогу куда вы пойдете. Это понятно? Держите себя в руках!
 
товарищи, что-то вы загоняетесь все и очень глубоко!
вы уж извините, но придираетесь к чему-то чего на самом деле нет!
да уж куда глубже .. если я написал, что пример плохой значит так и есть !
протрите глаза и освежите память - что бы вы ни писали в значении аргументов метода new класса NotesDataBase
nothing вы не получите.

в том-то и дело, что если класс, который выполняет какие-то действия на данными, получает неверные данные, то он не будет их обрабатывать, соотв. экземпляр его не нужен в данный момент времени с этим набором данных, поэтому мы и не создаем его.
я имел в виду идею проверки данных перед дальнейшей их обработкой, а то это выглядит как деление без проверки делителя на ноль
 
что бы вы ни писали в значении аргументов метода new класса NotesDataBase
nothing вы не получите
прошу прощения, тут я прокосил с этим примером, ты прав
в любом случае у нас есть пример с db.GetDocumentByUnid() :rolleyes:

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

[quote post='121812' date='17:10:2008 - 09:26']Модератор: Ненадо указывать кому в каком форуме быть и про что говорить, и не узнаете дорогу куда вы пойдете. Это понятно? Держите себя в руках![/quote]
Товарищ модератор, держите себя в руках ;)

во-первых, я никому не указывал куда ходить, так как Вы это понимаете, а во-вторых, я абсолютно не боюсь Вашего посыла, т.к. абсолютно честно и правдиво, причем не в грубой форме, высказал свое мнение относительно попыток других участников форума свести обсуждение темы в иное русло!
кроме того, не надо для выяснения подобных вопросов писать в общую тему, если Вы считаете, что я в чем-то не прав, напишите мне в личку, либо по мылу, я с удовольствием отвечу на интересующие Вас вопросы!
кроме того, если Вы считаете, что Ваш форум просто насыщен программистами высокого уровня, а я тут лишний, потому что думаю иначе чем Вы, то объясните мне это по той же личке или почте, и я просто перестану посещать форум, и поверьте, что испытывать какие-либо тяжести при этом не буду, скорее займу себя чем-то полезнее, чем спорить с Вами о том как и что нужно делать :)

В общем, надеюсь, что мы друг друга понимаем...
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab