Size: a a a

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

2021 February 05

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Sergey Trofimov
если можно не писать протокол, то не нужно писать протокол 😊
Почему? Это же бесплатная оптимизация, которая нативнее ляжет в jvm
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mike Bohdan
Да, но не стоит пренебрегать производительностью. Ну типа если можно написать протокол не надо писать (case (type x) ...) или мультиметод
протокол _всегда_ можно написать
означает ли процитированное, что в твоём коде не увидишь не мультиметодов, ни case?
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Sergey Trofimov
протокол _всегда_ можно написать
означает ли процитированное, что в твоём коде не увидишь не мультиметодов, ни case?
Нет
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Если бы ещё сделали зависимости в протоколах, типа (defprotocol Foo)
(defprotocol Bar :depends Foo)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mike Bohdan
Почему? Это же бесплатная оптимизация, которая нативнее ляжет в jvm
больше кода, дополнительные неудобства в использовании
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
я продолжу настаивать той на точке зрения, что производительность должна быть good enough, не более
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Sergey Trofimov
протокол _всегда_ можно написать
означает ли процитированное, что в твоём коде не увидишь не мультиметодов, ни case?
так и на Java можно начать писать
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
так и на Java можно начать писать
А если рассматривать протокол, как урезанный тайпкласс?
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
я бы сделал хэшмапу с описанием хэндлеров на нужные события
Она забивается быстро и становится нечитаемой
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
нет, не всегда или нет, не означает? 😊
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
В итоге ты городишь функции для сборки этой хэшмапы
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Anton Chikin
Она забивается быстро и становится нечитаемой
стопэ, она будет (по идее) иметь такое же количество ключей, как и config.edn
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Sergey Trofimov
нет, не всегда или нет, не означает? 😊
Ну типа, если можно расширить типы новым протоколом – так и делаю, если логика роутинга сложнее, чем по типам – мультиметоды, case/switch – неважный код на 3-4 ветки, которые не помещаются в if (не красиво выглядит)
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Ещё можно делать диспатч с core.match, но код получается громоздким
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mike Bohdan
Ну типа, если можно расширить типы новым протоколом – так и делаю, если логика роутинга сложнее, чем по типам – мультиметоды, case/switch – неважный код на 3-4 ветки, которые не помещаются в if (не красиво выглядит)
а я case-оподобные варианты уважаю, оно прямое как рэльс и не нужно рыскать в поисках имплементации
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
а я case-оподобные варианты уважаю, оно прямое как рэльс и не нужно рыскать в поисках имплементации
Ну оно же нечитаемо просто, как по мне
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mike Bohdan
Ну оно же нечитаемо просто, как по мне
хз, у тебя всё перед глазами
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Mike Bohdan
Ну оно же нечитаемо просто, как по мне
Лучше иметь отдельные объявления как мультиметодах
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
хз, у тебя всё перед глазами
В если case в один экран не влазит?
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
Mike Bohdan
Лучше иметь отдельные объявления как мультиметодах
в случае с мультиметодами тебе нужно держать в голове глобальные сущности
источник