Pull to refresh

Comments 64

Зря смеётесь. В пхп ноль - это не всегда ноль.
и что?=) Здесь-то суть не в том)
вобще странно почему NULL это абсолютный минус а не ноль.
В PHP NULL - это другой тип данных, и не равен 0, как в C/C++. Поэтому так.
Вы же не удивляетесь, почему 0 < '0' в С
с другой стороны брать минимальное от интежера и "того что не имеет значения" как то странновато...
имхо пхпшники должны были это предусмотреть
о простите - float конечно...
отвлекся на секунду на собственный код - а там целые только были числа
видимо разработчики были хитрыми людьми :)
UFO just landed and posted this here
UFO just landed and posted this here
А на чем он написан?
UFO just landed and posted this here
точно, как же я расширение файлов не углядел
...если бы программисты читали документацию, таких постов бы не возникало - результат операции сравнения с NULL - есть NULL.
по моему это просто шутка юмора.
как тогда объяснить?

$t = max(-273.15, NULL);
var_dump($t); // float(-273.15)
это можно обьяснить отсуствием стандартизации в пхп интерпритаторе ;)

две похожие функции могут возвращать совершенно непредсказуемые результаты - как тут :)
Вероятно, зависит от версии PHP. У меня на 5.2.0-8 выдаётся NULL.
чорт, сорри, не увидел max)
хотя программирование давно забросил, по аналогии с троичной логикой (тру, вальс, нуль) можно сказать, что по сравнению с интежером НУЛЛ (ничто) воспринимается как минус бесконечность, что в принципе логично в случае минимума - пустое место всегда меньше, а цирфа больше пустого. с другой стороны, возможность нечеткого определения типа в данном случае абсурдна и может вызывать проблемы, если нулл возник случайно. что поделать, в самом разрешающем все си и не такие вещи случаются.
Утверждение верно только для СУБД, да и то не всегда. Например, в MS SQL есть опция ansi_null, позволяющая управлять этим поведением (убито несколько часов на дебаг когда-то...).

Не в мире баз данных я такого пока не встречал. Было бы интересно поулчить ссылки на соответствующие разделы в документации тех языков, где это есть.
http://en.wikipedia.org/wiki/Null_%28com…
http://msdn.microsoft.com/en-us/library/…(VS.80).aspx
Не по конкретным языкам, но по MS SQL и по NULL в целом. Объяснение вполне логичное, поэтому если какой-то язык будет давать свою трактовку, то, думаю, это неправильно и врядли задокументировано.
Как-то категорично написал по «верно только для СУБД»....
На самом деле для тех языков с которыми я сталкивался. Про VB не знал, проверил. Действительно null в нем стоит особняком! Спасибо :)
Nullable Types (C# Programming Guide). В частности, если один из операндов null, сравнение с ним вседа дает false, а результат любых арифметических дейсвий - null. Это примерно как действия с числами NaN при операциях с плавающей точкой.
В C# оно нужно не для этого. Проблема в том, что: «сравнение с ним вседа дает false», а должно давать null!
Вот демонстрация того, что в C# null равен null:

Console.Write(new Nullable () == new Nullable () ? "habraoops" : "null != null");

На экран будет выведено: habraoops
Вы хотели сказать, должно давать false? А должно ли?
Нет, что хотел, то и сказал. А в кавычках я вас процитировал. :)

В базах все правильно: select null = null; даст null, а не false, как C#.

Мое изначальное утверждение было таковым: мне известно очень мало языков не считая sql и его диалектов в которых null себя ведет так, как написал deadem.
вот результаты сравнения разных типов в т.ч. и null
http://php.mirror.camelnetwork.com/manual/ru/types.comparisons.php
по-моему пост просто проверяет сколько у кого свободного времени. есть ли у человека время комментировать всякую фигню или нет...

шутку оценил - плоский английский юмор.
хм все баги это интересные факты ?:)
Не все. Но этот мне показался интересным. Любые арифметические операции с NULL воспринимают его как 0. Кроме декремента.
это то и плохо что воспринимает

цитата из мана пхп

Специальное значение NULL говорит о том, что эта переменная не имеет значения. NULL - это единственно возможное значение типа NULL.

так почему ее должны воспринимать как 0 любые арифметические операции если у нее нет значения - даже значения 0 ?:) это баг
Видимо, операции инкремента и декремента кодировали разные команды О_о
Одна вставила проверку на NULL, а другая забыла и приводит к int...
все возможно - но имхо так не должно быть в языке
видимо потому что в ПХП работает автоматической приведение любого типа к любому. поскольку ++ и — операции арифметические - нулл должен приводится к числу.
Это не баг, не верьте тому что говорит вам php.net, вообще не ходите туда, там все неаправда! Бу-га-га ))
Python
>>> repr(min(-453, None))
'None'
>>> repr(max(-453, None))
'-453'
>>>
Наверное, всё-таки специально (раз уж в двух языках встретилось).
Может, для сортировок?
Perl:

$a = undef;
$b = -273.15;

$c = $a <= $b ? $a : $b; # $c == $b
$d = $a >= $b ? $a : $b; # $d == $a
$e = $a == 0 ? 1 : 0 # $e == 1


То есть, вполне ожидаемое неявное приведение undef к 0.
>>> p [-273.15, nil].min

comparison of Float with nil failed (ArgumentError)

>>> p [-273.15, nil].max

undefined method `<=>' for nil:NilClass (NoMethodError)

так-то :)
забыл написать что это ruby
"Юмор на Хабре - Абсолютный нуль". Когда прочитала, первой реакцией было недоумение: "Каааак?? Обычно смешно..." А потом стало ясно, о чем речь =)
Пожалуй это самый остроумный ответ :-)
Сегодня случайно не день добра(или как он там называется), нет?
Это недостаток нетипизированных языков — непредсказуемость при работе с разными типами. Лучше уж Exception чем такой бред
Кому-то лучше, кому-то хуже:) Кто-то спокойно пишет с учётом этих особенностей, кто-то забывает... Если нестрогая типизация заявлена в языке, имхо, глупо тыкать пальцем в любой "интересный" пример сравнения и говорить "гыыы, хренасе, а я думал будет по-другому", ибо, как тут уже сказали, сравнивать тёплое с мягким не есть гут.
На самом деле, не всегда подразумевается, что в переменной x окажется Integer, иногда там может оказаться и None, особенно если значение привязано к поведению внешней библиотеки.

P.S> Сам пишу на Python и проблемы знакомы =)
читаю комменты и понимаю что на хабре людей даже с базовыми знаниями физики маловато... наверное поэтому народ либо совсем ничего не понимает, либо углубляется в специфику сравнения чего-либо с NULL... видимо магия абсолютного нуля далека от широких масс :)

грустно :(
Они просто забыли указать единицы измерения. И ещё, как известно, NULL градусов Цельсия не бывает (ну, разве что только в плохо написанном скрипте для сайта).
Для полноты эффекта такие посты надо делать после часа ночи. Иначе эффекта может и не быть вовсе
UFO just landed and posted this here
Судя по комментам, при той же активности, вы скоро начнёте ОС писать, и уверен напишите аналог Widows, или *nix, да ещё под Веб. =)))
На самом деле тут все логично, всего скорей они NULL представляют как 0, а у отрицательное число в побитовом представление старший бит 1 т.е 00000000... < 10000000...
ActionScript 2.0

$t = Math.max(-273.15, null);
trace($t);
$t = Math.min(-273.15, null);
trace($t);

-> not a number =) в обоих случаях.
Sign up to leave a comment.

Articles