глупости, null - это ссылка на нулевой указатель. Ноль во всех языках - false. Мамкины программисты, блиать.
А вот и первый мамкин программист, который не знает, что такое null. Судя по минусам, вас тут большинство.
Призываю вас к нормальной дискуссии. Я привел пример языка, в котором Boolean, Integer и null вообще несравнимые вещи. "null это ссылка на нулевой указатель, а во всех языках 0 это false". Как проверить правдивость этого высказывания, если система типов вообще не позволяет этого?
Да, токсичность - моя проблема.
У вас статическая типизация, ясен хрен вы не можете сравнить яблоки с грушей. Но это только ограничения статического анализатора и компилятора - фича высокоуровневых языков, чтобы сделать разработку более безопасной. Конвертируйте null в boolean средствами вашего языка и получите false.
Могу быть не прав, но это только для C, C++, JavaScript, etc... В Java, .Net, (Pyton???? ) etc.. - это просто неопределенная ссылка. Это две большие разницы.
Нет, null и для ссылок, и для значений. Вообще, понятие null широко используется в базах данных, именно для неопределенных значений, null ничему не равен и не имеет внешнего ключа, в отличие от нуля (0). Потому и в языках есть аналогичные типы данных.
Я поясню, например в .Net ссылка не может принимать значение null - вообще никак, если ей не поставили признак nullable. Этот признак нужен только для общения с БД, и с неуправляемым кодом, где null таки может быть.
P.S. null и необъявленное значение - это не всегда одно и то же. Зависит от языка.
В .Net ссылка может приобретать значение null, когда мы хотим, что бы GC прибрал за нами, но это нюанс, к вопросу о том равен ли null в языках с управляемым кодом и остальных - это не относится никак.
Простейший пример на первой ссылке в Гугле:
int? x = null;
Console.WriteLine(x.Value); // Ошибка
State? state = null;
Console.WriteLine(state.Value.Name); // ошибка
Это клиника. То, что ссылка может принимать null, сравниваться с null - это не значит, что она имеет значение null для nullable-переменных. Блин!!!! Вы поймите, что ссылка определена и имеет значение null - не факт того, что null не является ее значением.
Приведу пример: в c++ разыменованная ссылка указывает куда угодно (в место, которое процессу уже не принадлежит, либо принадлежит, но там уже совсем другая история). В Java и .Net - не указывает никуда. Это большая разница, и это решает кучу проблем с безопасностью кода. Поправьте, если я не прав.
Обратимся к первоисточникам:
Should I use NULL or 0?
In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days.
If you have to name the null pointer, call it nullptr; that's what it's called in C++11. Then, "nullptr" will be a keyword.
ну с 0 в плюсах вообще интересно, это единственный int котрый тривиальна кастуется к любому указателю.
т. е. void * kek = 0; норм а вот с 1 уже нужно явное привидение)
эта инициализация срабатывает только:
- для глобальных или статических переменных,
- или если она вызвана явным образом = {0},
- или если отдельно в стандарте для контейнера прописано, что он ее делает - как в примере с std::map
Она не будет вызвана, если примитивный тип создается на стеке или на куче.
как за это можно сажать на вилы? Исполнение понятий типов null/неопределено/ПустаяСсылка это то немногое что в 1С сделано лучше чем где-либо.
А еще не стоит пытаться рассказывать людям о вещах, о которых не имеешь ни малейшего представления
удобно так из кустов говном кидаться. я тоже могу сказать, что ты, например, пишешь безграмотно. и добавить, что если в школе не научили, то и я учить не буду.
Пока писал комментарий, я понял зачем! Это типа static??? Когда можно обращаться к полям объекта без его инициализации, и он гарантированно существует (ну как существует...) в единственном экземпляре?
сравнивать пустую ссылку с понятием static это нонсенс.
пустая ссылка, это просто нулевой уникальный идентификатор с привязкой к таблице данных.
Возможность чтения пустых значений реквизитов пустой ссылки в объектной модели это просто один из способов облегчить работу с языком.
А применять к пустой ссылке понятие "прототип объекта" как @jafariuse так вообще за гранью разума.
у пустой ссылки как раз нет "привязки к таблице данных". а есть описание класса с полями, методами и свойствами. и пожно получить значение, но не изменить его. ничего не напоминает?
если бы у ссылки не было привязки к таблице, то, учитывая что сама по себе ссылка в бд это просто guid, то две пустых ссылки разных таблиц были бы равны друг другу. Так что привязка к таблице есть, НО нет записи в этой таблице.
ничего не напоминает?
я понимаю о чем вы говорите, но не считаю правильным так говорить :). Считать что объект языка "СправочникСсылка" это класс от которого наследуется класс "СправочникОбъект" можно только разработчику платформы, но ни как не разработчику конфигурации :)
так то можно дойти до того что скажем "ОбъектМетаданных (Справочник)" это класс от которого наследуется СправочникСсылка.
Вообще, учитывая что подход компании 1С к ООП в языке сводится к определению "Заткнись и жуй что дают" говорить о классах и наследовании, наверно, вообще не стоит.
да. в целом соответствует классу с модификатором static. обращаться к полям можно, но обычно там пусто (0 для числовых значений, пустая ссылка для ссылочных). хотя чисто технически можно задать дефотные значения.
С 1С у всех традиционно неоднозначные отношения. Она вроде православна и при бабле, но изменчива и нелогична. Это касается всех продуктов 1С.
IT-юмор
5.6K поста52.5K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору