Pull to refresh
-18
0
Дмитрий Карловский @vintage

Адвокат Дьявола

Send message

Если у него машины нет, но он подписал со мной контракт, что по моему запросу предоставит мне машину, то он должен её предоставить. Где он её достанет — его проблемы, а не мои. Может угнать, может купить за свой счёт, может собрать в гараже из мусора.

В нормальных императивных языках есть чёткие контракты и non-nullable типы.

Боюсь это надо спрашивать тех, кто понимает эльфийский.

Каких, например?


Провалились скорее потому, что никому эта строгость не сдалась.

getItem должен делать ровно то, что указано в названии. Не больше и не меньше. Не null возвращать ибо тогда он был бы getItemOrNull. Не ошибку кидать, иначе он был бы getItemOrThrows. А вот создавать ли новый, дефолтный или вообще прокси — скрыто за абстракцией.

Кажется алгоритмы всё же отличаются.

Покажите аналогичный код на плюсах-то.

Я слышал у вас там принято в REPL сидеть.

Это уже протечка абстракции. Клиента не должно волновать создаётся оно там, клонируется или ещё что — для него ресурс существует всегда. То, что он создаётся лениво — не его ума дело. Собственно, мне ли объяснять это любителю бесконечных списков?

Что у вас будет в случае массивов разной длины?

У вас тут есть явно терминирующее значение []. С логическими значениями всё не так очевидно.

Не императивном, а неленивом. В неленивом коде падение произойдёт в момент сохранения, а не в момент чтения сохранённого.

Это называется "абстракция". Клиента не волнует, что система делает там у себя под капотом, её задача выдать элемент по идентификатору. Если допускается его несуществование, то метод называется findItem, если не допускается — getItem. Яркий пример такой абстракции: https://ru.wikipedia.org/wiki/Touch

В ленивом языке (например, в хаскелле) это будет эквивалентный код.

Тут дело не в ленивости, а в понимании, что дальнейшее итерирование не поменяет результата. Вы уверены, что компилятор хаскеля достаточно умный, чтобы добавить соответствующую проверку?

У вас мало того, что наглядность просела, так ещё и производительность — итерируетесь по всему списку, хотя достаточно было бы остановиться на первом же различии.

Где же ваша дедукция, которой вы так кичитесь? Префикс Get означает, что Item будет возвращён из базы в любом случае. А если его там ещё нет, то очевидно он должен быть тут же создан.

Вы это пользователю объясните, когда он в профиле ввёл что-то не правильно, а потом у него главная перестала открываться, так как именно там потребовался результат.

Если есть сомнения в чистоплотности автора кода, то такой код я не буду использовать независимо от сигнатуры. А если сомнений нет, то достаточно и её названия.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity