Size: a a a

2021 April 09

NL

Nikita Lyubchich in Frontend UA
Т.е. единственная мотивация называть null ошибкой на миллион - это отсутствие проверки «тут null от числа или null от строки»?
В последнее время чёт задумался, что это так себе мотивация и нулл в определенных местах на самом деле норм - но я испорчен динамическими типами в питоне где никто не запаривается
источник

AL

Andrey Listochkin in Frontend UA
Я честно скажу, еще 10 лет назад пришел к пониманию, что Null is a billion dollar mistake - это раздутая гипербола, и чисто из-за того, что звучит клево, ее повторяют как мантру.

NullPointerException / NRE / undefined is not a function / … - это самая простая ошибка, что может быть в коде. Она очень предсказуемая, ее очень легко диагностировать:

По номеру строки нашел место вызова (точку или скобки). Сразу понятно, кто null. За строкой по стектрейсу сразу понятно, откуда этот null взялся.

Помню, что даже еще джуном всегда радовался, если какая-то бага воспроизводилась из-за null, потому что сразу было понятно, что я ее быстро пофиксить смогу.

А с опытом просто перестаю код писать, который так легко nullы создает.

Я не против всяких Option монад или Nothing Objects. Если они есть в языке / проекте, я ими пользуюсь. Но если их нет, мне от этого ни жарко ни холодно.
источник

EO

Eugene Obrezkov in Frontend UA
не было бы null, не нужно было бы городить проверки со стороны компиляторов
источник

EO

Eugene Obrezkov in Frontend UA
почитайте историю возникновения null как такового и для решения какой проблемы его придумали
источник

VS

V7v S6k in Frontend UA
+
источник

EO

Eugene Obrezkov in Frontend UA
и, кстати, если уже говорить объективно, а не кому как нравится, то можно вот эти тезисы взять
источник

EO

Eugene Obrezkov in Frontend UA
источник

EO

Eugene Obrezkov in Frontend UA
а именно я хочу подчеркнуть слова "it brings back the same question whether you want to run your code quickly (without checks) or safely (with checks)"
источник

VS

V7v S6k in Frontend UA
Dijkstra це той ще авторитет в ліспо-подібних мовах)
источник

EO

Eugene Obrezkov in Frontend UA
оба случая имеют место быть, но мне лично нравится безопасность превыше скорости
источник

EO

Eugene Obrezkov in Frontend UA
поэтому я и против null
источник

VS

V7v S6k in Frontend UA
Не забувайте, що жс - це ліспо- і смолтоко-подібна мова, а не хаскеле-подібна чи джавоподібна. І нулл в жс не має ніякого відношення до нулл в цих мовах.

В ліспах nil - це пустий список ’(). В деяких ліспах взагалі немає nil, є лише пустий список.

Смолток перейняв цю традицію, але там замість списків, базова абстракція - це об’єкт. Тому null там - це  пустий об’єкт.

жс і рубі перейняли цю традицію
источник

VS

V7v S6k in Frontend UA
І з цієї точки зору, в жс null - ідеальне рішення. А от справжня єресь - це undefined.
источник

VS

V7v S6k in Frontend UA
І я чесно зовсім не розумію бажання писати на жс як на хаскелі. Це зовсім різні мови.
источник

EO

Eugene Obrezkov in Frontend UA
а кто говорил такое?
источник

EO

Eugene Obrezkov in Frontend UA
по поводу null можно сюда ссылаться, это доклад с тезисами https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/
источник

EO

Eugene Obrezkov in Frontend UA
и там же есть и контекст, откуда взялась эта фраза "billion dollar mistake"
источник

VS

V7v S6k in Frontend UA
Ти уявляєш собі лісп з монадою замість пустого списку?)
источник

VS

V7v S6k in Frontend UA
Я не дуже просто
источник

EO

Eugene Obrezkov in Frontend UA
я не понимаю к чему ты это)
источник