На самом деле, прирост быстродействия от троичной логики не так уж и хорош, как говорят нам ретро-статьи. Ибо троичные операции совершать процессору нужно куда как реже, чем все другие.
Могу быть не прав, но это только для C, C++, JavaScript, etc... В Java, .Net, (Pyton???? ) etc.. - это просто неопределенная ссылка. Это две большие разницы.
Нет, null и для ссылок, и для значений. Вообще, понятие null широко используется в базах данных, именно для неопределенных значений, null ничему не равен и не имеет внешнего ключа, в отличие от нуля (0). Потому и в языках есть аналогичные типы данных.
Приведу пример: в 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.
Я поясню, например в .Net ссылка не может принимать значение null - вообще никак, если ей не поставили признак nullable. Этот признак нужен только для общения с БД, и с неуправляемым кодом, где null таки может быть. P.S. null и необъявленное значение - это не всегда одно и то же. Зависит от языка.
В .Net ссылка может приобретать значение null, когда мы хотим, что бы GC прибрал за нами, но это нюанс, к вопросу о том равен ли null в языках с управляемым кодом и остальных - это не относится никак.
Это клиника. То, что ссылка может принимать null, сравниваться с null - это не значит, что она имеет значение null для nullable-переменных. Блин!!!! Вы поймите, что ссылка определена и имеет значение null - не факт того, что null не является ее значением.
Пока писал комментарий, я понял зачем! Это типа static??? Когда можно обращаться к полям объекта без его инициализации, и он гарантированно существует (ну как существует...) в единственном экземпляре?
у пустой ссылки как раз нет "привязки к таблице данных". а есть описание класса с полями, методами и свойствами. и пожно получить значение, но не изменить его. ничего не напоминает?
если бы у ссылки не было привязки к таблице, то, учитывая что сама по себе ссылка в бд это просто guid, то две пустых ссылки разных таблиц были бы равны друг другу. Так что привязка к таблице есть, НО нет записи в этой таблице.
ничего не напоминает?
я понимаю о чем вы говорите, но не считаю правильным так говорить :). Считать что объект языка "СправочникСсылка" это класс от которого наследуется класс "СправочникОбъект" можно только разработчику платформы, но ни как не разработчику конфигурации :)
так то можно дойти до того что скажем "ОбъектМетаданных (Справочник)" это класс от которого наследуется СправочникСсылка.
Вообще, учитывая что подход компании 1С к ООП в языке сводится к определению "Заткнись и жуй что дают" говорить о классах и наследовании, наверно, вообще не стоит.
да. в целом соответствует классу с модификатором static. обращаться к полям можно, но обычно там пусто (0 для числовых значений, пустая ссылка для ссылочных). хотя чисто технически можно задать дефотные значения.
удобно так из кустов говном кидаться. я тоже могу сказать, что ты, например, пишешь безграмотно. и добавить, что если в школе не научили, то и я учить не буду.
Призываю вас к нормальной дискуссии. Я привел пример языка, в котором Boolean, Integer и null вообще несравнимые вещи. "null это ссылка на нулевой указатель, а во всех языках 0 это false". Как проверить правдивость этого высказывания, если система типов вообще не позволяет этого?
У вас статическая типизация, ясен хрен вы не можете сравнить яблоки с грушей. Но это только ограничения статического анализатора и компилятора - фича высокоуровневых языков, чтобы сделать разработку более безопасной. Конвертируйте null в boolean средствами вашего языка и получите false.
Пока полноценного компьютера способного выполнять что-то действительно полезное пока нет, но это дело времени. Работы идут и успехи есть, например вот https://habr.com/ru/news/t/468361
Теоретически наиболее экономичной системой счисления для представления значения числа цифрами является система с основанием е =2,71828......, находящимся между числами 2 и 3.
это же просто попытка представить e в программировании, основанном на двоичной системе . грустно как-то это ((
очень бородатая шутка - я помню еще лет 10 назад её слышал в ключе типа "если бы в россии создали свой язык программирования то он был бы не бинарым а тернарым - ДА НЕТ и АВОСЬ"
None/null - индикатор того, что переменная не определена/содержит пустое значение. И не относится ни булевому типу, ни к чему еще, это отдельный самодостаточный тип. Использовать none с булевыми переменными, как "может быть" - не особо корректно
«‘find’ takes a list and a predicate and returns the first element that satisfies the predicate. But it returns that element wrapped in Maybe value... a Maybe value can either be Just something or Nothing»
На самом деле, вполне оправданно. Во многих языках и так булева переменная может принимать, фактически, три значения: true, false и null. Но есть подход, запрещающий использовать null в нормальных ситуациях - его появление должно автоматически означать ошибку. В этом случае надо явно определять отсутствие значения, что и сделано.
например у меня ключивые слова синие а макросы фиолетовые и сразу видно что true или false задефайнены, просто переходишь к объявлению этих макросов. Какой то странный вопрос, ты хоть раз ide пользоваться?
А как же "да нет, наверное"?
Это скорее к 1С
в 1С бы было Истина, Ложь, Неопределено. или чему угодно другому т.к. это слабо типизированный язык.
Держи, MGIMO finished
Пробел блеать
Какое ТЗ было, так и сделял
"да нет, наверное", к слову, на английском будет чем-то типа "rather no"
Поэтому и приписал про МГИМО финишед, с анекдота
"rather no" = "скорее нет". Точнее будет "Yeah, no, kinda", хотя тоже не совсем
Угу. Если мы говорим серьёзно об аналоге, то примерно так и есть по смыслу у "да нет, наверное".
false должен идти первым. Для обратной совместимости.
О, том же подумал. Читал коменты и не мог поверить что никто не заметил
была такая эвм Сетунь в 1958 и она использовала троичную логику (-1,0,+1)
Это как секс втроём. Если и не зашло, то попробовать стоило.
На самом деле, прирост быстродействия от троичной логики не так уж и хорош, как говорят нам ретро-статьи. Ибо троичные операции совершать процессору нужно куда как реже, чем все другие.
P.S. Но в любом случае - это было круто.
Почти. Nullable bool. Null трактуется как неопределенное значение.
Могу быть не прав, но это только для C, C++, JavaScript, etc... В Java, .Net, (Pyton???? ) etc.. - это просто неопределенная ссылка. Это две большие разницы.
Нет, null и для ссылок, и для значений. Вообще, понятие null широко используется в базах данных, именно для неопределенных значений, null ничему не равен и не имеет внешнего ключа, в отличие от нуля (0). Потому и в языках есть аналогичные типы данных.
Приведу пример: в c++ разыменованная ссылка указывает куда угодно (в место, которое процессу уже не принадлежит, либо принадлежит, но там уже совсем другая история). В Java и .Net - не указывает никуда. Это большая разница, и это решает кучу проблем с безопасностью кода. Поправьте, если я не прав.
Обратимся к первоисточникам:
http://www.stroustrup.com/bs_faq2.html#null
ну с 0 в плюсах вообще интересно, это единственный int котрый тривиальна кастуется к любому указателю.
т. е. void * kek = 0; норм а вот с 1 уже нужно явное привидение)
Вы даже если не присвоете значение явно, получите 0, это ж zero initialization
в C/c++ нет ни какого zero initialization, только в отладке под vs.
https://en.cppreference.com/w/cpp/language/zero_initializati...
эта инициализация срабатывает только:
- для глобальных или статических переменных,
- или если она вызвана явным образом = {0},
- или если отдельно в стандарте для контейнера прописано, что он ее делает - как в примере с std::map
Она не будет вызвана, если примитивный тип создается на стеке или на куче.
https://gcc.godbolt.org/z/Dam3gU
Я поясню, например в .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); // ошибка
Только вот int это значимый тип, а не ссылочный.
Тут вы всего лишь оборачиваете int в Nullable<int>
Ты себя закапываешь прям.
Это клиника. То, что ссылка может принимать null, сравниваться с null - это не значит, что она имеет значение null для nullable-переменных. Блин!!!! Вы поймите, что ссылка определена и имеет значение null - не факт того, что null не является ее значением.
Мои глаза закровоточили. Я потом снизу прочитал что вы ещё и не видите разницу между значимым и ссылочным типом.
Подиж ты. А 1С за все то же самое на вилы готовы поднять.
как за это можно сажать на вилы? Исполнение понятий типов null/неопределено/ПустаяСсылка это то немногое что в 1С сделано лучше чем где-либо.
в 1с есть неопределено, а есть Null. и они разные.
а, есть еще пустаяСсылка. эта такая штука, вроде прототипа объекта.
Пока писал комментарий, я понял зачем! Это типа static??? Когда можно обращаться к полям объекта без его инициализации, и он гарантированно существует (ну как существует...) в единственном экземпляре?
сравнивать пустую ссылку с понятием static это нонсенс.
пустая ссылка, это просто нулевой уникальный идентификатор с привязкой к таблице данных.
Возможность чтения пустых значений реквизитов пустой ссылки в объектной модели это просто один из способов облегчить работу с языком.
А применять к пустой ссылке понятие "прототип объекта" как @jafariuse так вообще за гранью разума.
у пустой ссылки как раз нет "привязки к таблице данных". а есть описание класса с полями, методами и свойствами. и пожно получить значение, но не изменить его. ничего не напоминает?
если бы у ссылки не было привязки к таблице, то, учитывая что сама по себе ссылка в бд это просто guid, то две пустых ссылки разных таблиц были бы равны друг другу. Так что привязка к таблице есть, НО нет записи в этой таблице.
я понимаю о чем вы говорите, но не считаю правильным так говорить :). Считать что объект языка "СправочникСсылка" это класс от которого наследуется класс "СправочникОбъект" можно только разработчику платформы, но ни как не разработчику конфигурации :)
так то можно дойти до того что скажем "ОбъектМетаданных (Справочник)" это класс от которого наследуется СправочникСсылка.
Вообще, учитывая что подход компании 1С к ООП в языке сводится к определению "Заткнись и жуй что дают" говорить о классах и наследовании, наверно, вообще не стоит.
да. в целом соответствует классу с модификатором static. обращаться к полям можно, но обычно там пусто (0 для числовых значений, пустая ссылка для ссылочных). хотя чисто технически можно задать дефотные значения.
А еще не стоит пытаться рассказывать людям о вещах, о которых не имеешь ни малейшего представления
оу. 15 лет в разработке, но ни малейшего представления. ну, давай. научи меня
За 15 лет не научился - значит и я тебя не научу.
удобно так из кустов говном кидаться. я тоже могу сказать, что ты, например, пишешь безграмотно. и добавить, что если в школе не научили, то и я учить не буду.
Удобно так пиздеть несвязанное с реальностью. Я пишу грамотно, а ты несешь дичь.
Кстати, нет.
Я всё не читал, но тут ты это, того.
покажи где я неправ. что неопределено - булевый тип. или что пустойссылки не существует
Ты начал нести хуйню про пустую ссылку. А теперь требуешь рассказать про булевый тип. И, типа, ты такой кгосавчег всех победил.
Рассказать, где ты не прав, или сам догадаешься?
конечно расскажи.
Рассказываю: Это разные вещи. И пустая ссылка - нихуя не прототип.
С 1С у всех традиционно неоднозначные отношения. Она вроде православна и при бабле, но изменчива и нелогична. Это касается всех продуктов 1С.
глупости, null - это ссылка на нулевой указатель. Ноль во всех языках - false. Мамкины программисты, блиать.
Все зависит от системы типов.
А вот и первый мамкин программист, который не знает, что такое null. Судя по минусам, вас тут большинство.
Призываю вас к нормальной дискуссии. Я привел пример языка, в котором Boolean, Integer и null вообще несравнимые вещи. "null это ссылка на нулевой указатель, а во всех языках 0 это false". Как проверить правдивость этого высказывания, если система типов вообще не позволяет этого?
Да, токсичность - моя проблема.
У вас статическая типизация, ясен хрен вы не можете сравнить яблоки с грушей. Но это только ограничения статического анализатора и компилятора - фича высокоуровневых языков, чтобы сделать разработку более безопасной. Конвертируйте null в boolean средствами вашего языка и получите false.
Это если кастовать аккуратно.
В квантовом компьютере нет true и false, есть только maybe и вероятность этого самого maybe
Пока полноценного компьютера способного выполнять что-то действительно полезное пока нет, но это дело времени. Работы идут и успехи есть, например вот https://habr.com/ru/news/t/468361
https://ru.m.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%B8%D1%...
Скорее фильтр Блума https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82...
это же просто попытка представить e в программировании, основанном на двоичной системе . грустно как-то это ((
enum Boolean {
False = 0,
Unlikely,
Maybe,
Possibly,
Probably,
Likely,
Definitely,
True
};
typedef float boolean
очень бородатая шутка - я помню еще лет 10 назад её слышал в ключе типа "если бы в россии создали свой язык программирования то он был бы не бинарым а тернарым - ДА НЕТ и АВОСЬ"
Функциональщиков тут нет, как понимаю
никто про монаду maybe и не вспомнил, но, благо, она и не так реализовывается
От замены maybe на
undefinedunknown логикак изменится?#comment_155048306
То ли я далек от физики, то ли от программирования, то ли с ч.ю. проблемы...
Надо ж
Опять пересматривать Кремниевую долину, серию 2 сезона про онлайн трансляцию из гнезда кондора.
Шутка не в том что есть 3 значения, а в том что оно именно maybe(возможно). См кубит : https://ru.m.wikipedia.org/wiki/%D0%9A%D1%83%D0%B1%D0%B8%D1%...
я нон и использую для мэйби
Это свидетельствует что у вас где-то пробел в понимании либо внимании языка либо в архетектуре и дизайне.
И не относится ни булевому типу, ни к чему еще, это отдельный самодостаточный тип.
Использовать none с булевыми переменными, как "может быть" - не особо корректно
неопределенная переменная это undefined)
во вторых использовать нан для переменных, которые еще в суперпозиции - нормально.
очень даже)
Напомнило:
«‘find’ takes a list and a predicate and returns the first element that satisfies the predicate. But it returns that element wrapped in Maybe value... a Maybe value can either be Just something or Nothing»
На самом деле, вполне оправданно. Во многих языках и так булева переменная может принимать, фактически, три значения: true, false и null. Но есть подход, запрещающий использовать null в нормальных ситуациях - его появление должно автоматически означать ошибку. В этом случае надо явно определять отсутствие значения, что и сделано.
В семействе .Net для этого специально ввели признак nulleble - ну надо же, как-то согласовывать структуру языков, с реалиями баз данных.
От чувака поставившего минус камменты будут?
Я тоже не понимаю, почему мне минусы ставят ¯\_(ツ)_/¯
Я ни разу не программист, но разве Boolean не зарезервированное слово и поэтому его нельзя так использовать?
ставишь нормальную раскраску кода и вуаля)
что вуаля?
какая ide подсветит что проблема в define?
а не там где оно используется и может потом вылезти непредвиденная ситуация.
при условии, что у тебя в проекте дохулиард файлов и ты не единственный разработчик, и define этот писал не ты.
например у меня ключивые слова синие а макросы фиолетовые и сразу видно что true или false задефайнены, просто переходишь к объявлению этих макросов. Какой то странный вопрос, ты хоть раз ide пользоваться?
#define struct union
Type Coproduct ;)
Зависит от языка программирования
В c# это bool. Да и вообще, хочешь юзать это слово - юзай @bool
Типичный эникей, 1С видевший на компе бухгалтера, пока переставлял системник по феншую
А так же: "возможно", "в порядке исключения" и "зайдите после праздников". Ох не тот язык сделали базовым для программирования. :-)
в 1с нет строгой типизации, поэтому к переменной типа булево можно присвоить неопределено. но неявно приводить неопредлено к логическому типу нельзя.
Fuzzy logic скорее (женская логика, для тех кто английский не знает) :)