секреты кухни
Nov. 23rd, 2022 01:28 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Фесбук вдруг признался на твитере, что у них в коде куча NullPointerException
s в их коде, и они зафигачили тулзу, чтобы с ними бороться.
Кстати, в Гугле была такая ловушка для NPE и прочего, ThirdEye называлась - если у тебя в коде NPE случается в продакшене, то тебе сразу мейл шлют, мол, слышь, инженер... Но это были "нулевые годы".
Вот такие дела. Вы там думаете, что в фесбуке какие-то гении работают. Там работают, по большей части (как и везде) мудаки и долбоебы. Но есть и гении.
no subject
Date: 2022-11-23 01:01 pm (UTC)no subject
Date: 2022-11-23 04:25 pm (UTC)А при этом у них же там есть аннотации в этой ихней жабе, мол,
notnull - правда, ими не особо-то и пользовались, потому что буков много, а толку мало.
no subject
Date: 2022-11-23 05:57 pm (UTC)А кстати - можно ли въ Scala дѣлать NotNull?
no subject
Date: 2022-11-23 07:13 pm (UTC)Со скалой тоже не на 100% благополучно. Т.е. нормально, если вот я пишу скальный код, то после вызова каждой джавной функции лучше проверить все результаты на null,
val whatIGot: Option[Something] = Option(javaclass.javamethod(params))
. And if Java calls our scala method, it makes sense to wrap parameters inOption
too. (And never write methods that take an option... but that's optional.)Но у скалы есть один грязный секрет. Неинициализированные члены класса. Они все null.
no subject
Date: 2022-11-23 01:07 pm (UTC)это везде всегда так. мало того, с ростом компании удельный вес мудаков и долбойобов неизбежно растет.
no subject
Date: 2022-11-23 04:47 pm (UTC)no subject
Date: 2022-11-23 04:49 pm (UTC)Ну мы тут думали, что в 2022-м уже люди немножко научились программировать. Особенно в такой конторе за такие деньги.
no subject
Date: 2022-11-23 07:24 pm (UTC)no subject
Date: 2022-11-23 07:45 pm (UTC)Да, наверно. Вот, человечество движется. Куда-то.
no subject
Date: 2022-11-23 07:35 pm (UTC)no subject
Date: 2022-11-23 07:39 pm (UTC)no subject
Date: 2022-11-23 07:43 pm (UTC)На 99% да. Вся джавская философия состоит в перепасовывании nulls и в проверках, время от времени, уж не null ли тот или иной пойнтер. Куклин на днях про это на фесбуке красиво написал. С научной точки зрения, джавщики живут в категории Эйленберга-Мура. Заменяя null username на пустую строку, сумму к оплате, если она null, заменяя на $0.00 - и будучи довольны своей рачительностью.
no subject
Date: 2022-11-23 07:56 pm (UTC)no subject
Date: 2022-11-24 02:49 pm (UTC)потому что программисты С не ленились писать
if ! file обработка ошибок
no subject
Date: 2022-11-23 10:18 pm (UTC)В golang вон люди беспрерывно проверяют err на ноль и не жалуются. Структурно то одно и тоже.
no subject
Date: 2022-11-24 07:25 am (UTC)Это далеко не одно и то же. В скале можно ничего не проверять. Оно само.
no subject
Date: 2022-11-23 10:47 pm (UTC)В Java через N лет переймут.
no subject
Date: 2022-11-25 09:05 am (UTC)В С#, в типичном Ms стиле, придумали гениальное решение: спрятать симптом и загнать проблему поглубже, сделать так, чтобы вместо null вокруг летали неинициализированные null-objects. Теперь exceptions не возникают в тот момент, когда мы пытаемся работать с неинициализированным обьектом как будто он инициализирован (т.е. стало ясно, что происходит что-то не то). Вместо єтого мы просто используем неинициализированные данные как есть. Задача решена, землекопа полтора.
А то, что данные используются неправильные и мы в лучшем случае получим уже другой exception дальше по ходу исполнения (но тогда нам еще прийдется поразбираться откуда оно взялось), а в худшем просто тихо получим неверный результат - єто неважно, главное от NPE избавились полностью.
no subject
Date: 2022-11-25 09:30 am (UTC)Аналогичная хрень в джаве была впендюрена лет 20 назад, я и в нее верил, как в хороший прием (пока ФП не освоил). Это и есть пример, когда обязательно нужно "дефолтное значение". Это и означает, что джавный менталитет в программировании - это категория алгебр над монадой Maybe. Типичное наблюдение над джавщиками: если не нашли, сколько должны доктору, значит, должны 0. Если не нашли, как зовут доктора, значит, доктора зовут "". Вот тут-то в скале и помогает какая-нибудь монада, лучше всего - ZIO.