Вот предположим, у вас объект — это запись с сотрудником, какой у нее идентификатор?
Например, null_id. Я когда работаю с идентификаторами из БД, которые являются целыми положительными числами,
использую -1 в качестве null_id, при этом сама проверка на isNul() выглядит как return id==null_id;
id, естественно, при этом уже знаковый тип данных.
PS Вообще, это паттерн Null Object, со всеми его недостатками.
В принципе, я с Вами согласен. Если у Вас язык с динамической типизацией, можно не париться и использовать null, но нужно быть готовым к исключениям. А вот если со статической, то Null Object неплохо работает. В библиотеке Qt, например, isNull() используется повсеместно, и получается довольно удобно. Да и у Вас в исходном вопросе было ограничение, что результат — именно объект некоего класса.
А если результат — это единичный экземпляр класса?
Мое решение работает для всех языков, где есть функции, классы и тип bool. Как с ограничениями в виде статической типизации, так и без.
Более того, объект класса может нормально функционировать даже в том случае, если он isNull. А вот попытка вызова метода класса для объекта null без проверки, что это null, приведет к появлению исключения, которое придется обрабатывать.
Я, как ярый разработчик на С++, не могу вернуть null из функции, возвращающей объект какого-нибудь класса. Поэтому приходится к классу приделывать isNull(), чтобы возвращаемый объект мог быть как бы объектом нужного класса, но при этом null.
Скажем так, лично я это решение люблю за его простоту и по-возможности использую. А насчет проверки — ну тут уж сложно что-то универсальное придумать. Накосячить всегда можно, особенно в языках с динамической типизацией. Я с ужасом вспоминаю свои первые опыты с php, когда я узнал, что при вызове функции надо this проверять, что он живой, а так же все входящие параметры функции, что они вообще были переданы, и к тому же имеют нужный тип.
По себе могу сказать — иногда просто везет. Например, по милости компилятора (или согласно своей-же крюкописи где-то в другом месте в коде) переменная, которой сам забыл присвоить значение (как, например, здесь: pattern->patternRepeatY = false;), уже содержит нужное значение. Ошибку-то ты потом сам находишь, но только по коду, а в работе программы она не проявляется. Вот так и живем. ))
Тут скорее вопрос в адаптации. В свое время на платформе Meego Qt-приложения выглядели и работали очень по-мобильному. Я когда ради интереса написал клиент к mpd (точнее даже не написал, а скомпилировал написанный ранее под десктоп), он выглядел и работал лучше, чем другие, написанные на gtk-mm. Так что если разработчики Qt поднатужатся и сделают так, чтобы все стандартные контролы выглядели и работали как нативные, получится натуральная конфетка.
Зато на Хабре больше специалистов, которые знают текущее состояние дел и могут оценить последствия и подводные камни принимаемых законов. Вот как можно ориентироваться на мнение людей, некоторые из которых вообще интернетом не пользуются и знают только, что «там сплошных голых баб показывают»? По крайней мере, опрос на Хабре предоставит мнение более квалифицированной в IT сфере выборки населения.
Я хотел сказать, что эту проблему надо решать комплексно. С одной стороны, это механика, обеспечивающая стабильность обзора (дворники, или еще какие-то очистители, а с другой стороны алгоритмы, позволяющие, например, рассчитывать «полосы» исходя из окружающих автомобиль транспортных средств при отсутствии разметки, или ехать некоторое время вслепую по памяти, если на стекло неожиданно попадает большое количество воды.
Вообще там алгоритмическая тематика очень интересная, я сам пару лет в университете занимался робототехникой, причем именно алгоритмами распознавания изображений и автономного передвижения, и примерно представляю комплекс проблем, который там возникает. То, что начали появляться такие вот автопилоты, которые уже могут самостоятельно ездить, просто поразительно.
Ну, на стекле есть дворники, а мы сами можем менять положение головы в поисках чистого участка стекла. А вот с камерами немного сложнее.
У моего друга на приусе стоит датчик спереди парковочный, так он зимой-весной каждые 2 дня заляпывается и начинает постоянно пищать, приходится чистить. Так что нужно приделывать манипулятор с тряпочкой, чтобы камеры протирал сам. ))
Ну вот там сидели два программиста и обсуждали:
— Слушай, у нас высота может большая быть сделаем ее 32-битной.
— Да не, не будет никто так высоко летать, а у нас железка 16-битная. Так что давай делать 16 бит высоту, съэкономим память, и работать побыстрее будет.
Так и получается потом, что потом самолеты под землю уходят при переполнении интов. :D
Хочу дополнить — как правило, при этом система запрашивает пароль пользователя, а не рута. Так что и рутовый пароль постоянно вводить тоже не надо.
А по поводу репозиториев — если «стороннее ПО» opensource, можно договориться с разработчиками дистрибутива, и они добавят ПО в свой репозиторий, а так же проследят, чтобы не было конфликтов с другими пакетами, и были все нужные библиотеки.
Мне кажется, что там вместо while должен быть if, иначе без break получится, что одной и той же переменной d->namespaceId будет просто много раз подряд присвоено значение. Тогда можно было бы просто взять последнее.
В Линуксе обновление штатно производится средствами управления пакетами в репозиториях дистрибутива (например, в убунте — apt-get). Собственно, больше всего проблем в Windows, потому что там нет стандартизированных средств управления приложениями (магазинов, репозиториев софта), и каждый глумится, как может.
Как раз в Линуксе такой вариант не работает вообще — там по-умолчанию библиотеки в папке с исполняемым файлом не ищутся (типа, не секурно), только в системных путях.
Например, null_id. Я когда работаю с идентификаторами из БД, которые являются целыми положительными числами,
использую -1 в качестве null_id, при этом сама проверка на isNul() выглядит как
return id==null_id;
id, естественно, при этом уже знаковый тип данных.
В принципе, я с Вами согласен. Если у Вас язык с динамической типизацией, можно не париться и использовать null, но нужно быть готовым к исключениям. А вот если со статической, то Null Object неплохо работает. В библиотеке Qt, например, isNull() используется повсеместно, и получается довольно удобно. Да и у Вас в исходном вопросе было ограничение, что результат — именно объект некоего класса.
Мое решение работает для всех языков, где есть функции, классы и тип bool. Как с ограничениями в виде статической типизации, так и без.
Более того, объект класса может нормально функционировать даже в том случае, если он isNull. А вот попытка вызова метода класса для объекта null без проверки, что это null, приведет к появлению исключения, которое придется обрабатывать.
Вообще там алгоритмическая тематика очень интересная, я сам пару лет в университете занимался робототехникой, причем именно алгоритмами распознавания изображений и автономного передвижения, и примерно представляю комплекс проблем, который там возникает. То, что начали появляться такие вот автопилоты, которые уже могут самостоятельно ездить, просто поразительно.
У моего друга на приусе стоит датчик спереди парковочный, так он зимой-весной каждые 2 дня заляпывается и начинает постоянно пищать, приходится чистить. Так что нужно приделывать манипулятор с тряпочкой, чтобы камеры протирал сам. ))
— Слушай, у нас высота может большая быть сделаем ее 32-битной.
— Да не, не будет никто так высоко летать, а у нас железка 16-битная. Так что давай делать 16 бит высоту, съэкономим память, и работать побыстрее будет.
Так и получается потом, что потом самолеты под землю уходят при переполнении интов. :D
А по поводу репозиториев — если «стороннее ПО» opensource, можно договориться с разработчиками дистрибутива, и они добавят ПО в свой репозиторий, а так же проследят, чтобы не было конфликтов с другими пакетами, и были все нужные библиотеки.
Мне кажется, что там вместо while должен быть if, иначе без break получится, что одной и той же переменной d->namespaceId будет просто много раз подряд присвоено значение. Тогда можно было бы просто взять последнее.
Подозреваю, что часть встраиваемых устройств еще и до уязвимой версии ssl обновиться не успела, так что их пользователи могут спать спокойно :D