Size: a a a

Clojure — русскоговорящее сообщество

2021 July 22

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Ок. Переформулирую.
Вот ты не парсер пишешь, а реализацию интерфейса JsonObject, которая ещё и отнаследована от Map.
Какой ты выберешь подход и каково его обоснование?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
в таком разрезе выбор действительно контр-интуитивный
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
только тут надо помнить, что разговор идет о Java и ее традициях.
если есть метод, который возвращает одно и тоже на две принципиально разных ситуации (отсутствие ключа, и значение его null),  то это не очень хорошо.

вариант исключения (ну только более специфицированного чем НПЕ) в случае отсутствия ключа,
и вариант метода с дефолтным значением - вполне норм.
покрываются нужные кейсы и нет неоднозначности.
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
у Map  нету метода getString
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а вот у java.util.Map ещё хитрее
https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#get(java.lang.Object)
NullPointerException - if the specified key is null and this map does not permit null keys (optional)
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Так я о традициях и начал!
В Java считается, что важнее довести до клиента высокую значимость различия между совершенно разными ситуациями.
А клиенту нахрен это не нужно!
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
в джаве горбатостей более чем достаточно,
но это все равно, что возмущаться тем, что "1" != 1
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
ведь есть масса программистов, которым это привычно
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Не. Лучше так:
= != ==
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
NPE есть прямое следствие реализации
A convenience method for getJsonString(name).getString()

когда getJsonString(name) возвращает NULL
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Я вот щас подумал, и решил, что если бы в кложе было так, что «1» == 1, то я бы не противился.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ну и соответственно другое исключение, когда под name сидит не String — это уже последствия типизации.
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
Именно!
Кто-то когда реализовывал, взял и не стал думать и делать тот выбор о котором я у Максима спрашиваю. Просто сделал как-то по инерции и закоммитил.
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
А потом всё! Не исправишь, ибо breaking-change.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а что делать в случае второй проблемы, когда под name сидит значение не того типа?
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
@mpenzin, не было обоснования никакого.
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Именно с таким подходом мы имеем Java, js, C++ итп
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
ну не знаю, большая часть известных мне опытных разработчиков за такое отрывает руки :)
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
вот да, и никак их не разъубедить, деньги то платятся
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
еще раз.
возвращение одного и тогоже null в двух разных случаях - это плохо.
источник