|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Привет котаны-бротаны! На дворе стоит пятница и JDK 17. А значит пора обсудить сабж. Не прошло и 25 лет как нам в синтасис наконец-то завезли нужну вешь. Не хочу копи-пастить хабр. Вот тут обзорная статья https://habr.com/ru/post/579178/ Пару мыслей. 1) В своих экспериментах с bigdata я часто использовал подобную конструкцию Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
Только в старом варианте с if-else. И здесь с одной стороны стояли JDBC types а с другой - Apache ORC и наоборот. Вобщем пора рефакторить. Что у вас в продуктовом коде? Как повлияет на качество новое улучшение. 2) Не совсем я согласен с предлагаемой терминологией. Мне кажется что pattern-matching для функций - это достаточно старый термин. Гораздо старее чем Java. И в функциональном программировании он - немного шире чем предлагают в JEP. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 19:43 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Ого.. Это улучшение сэкономит в среднем аж 10 строк на проект. Киллер-фича, моя жизнь никогда не станет прежней :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 19:49 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 07:18 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
вообще субъективизм зашкаливает mayton 1) В своих экспериментах с bigdata я часто использовал подобную конструкцию Basil A. Sidorov- типичный пример неумения думать Автор страдает ... static String formatter(Object o) { String formatted = "unknown"; if (o instanceof Integer i) { formatted = String.format("int %d", i); } else if (o instanceof Long l) { formatted = String.format("long %d", l); } else if (o instanceof Double d) { formatted = String.format("double %f", d); } else if (o instanceof String s) { formatted = String.format("String %s", s); } return formatted; } ... и цепочка вложенных if это (действительно) ужасно. Но почему эти страдающие перфекционисты не в состоянии переписать цепочку в блок: static String formatter(Object o) { if (o instanceof Integer i) { return String.format("int %d", i); }; if (o instanceof Long l) { return String.format("long %d", l); }; if (o instanceof Double d) { return String.format("double %f", d); }; if (o instanceof String s) { return String.format("String %s", s); } return "unknown"; } ? Оно, конечно, тоже громоздкое, но это хотя бы "Die erste Kolonne marshiert ..." и не требует ломать голову над вопросом - "А нафига тут вложенность? Оптимизация выхода? Серьёзно???" P.S. Когда я вижу аргументацию такого качества, хочется спросить: вы действительно считаете свои аргументы убедительными? когда я писал что хибер не есть использовать для смены субд - мне возражали , наоборот позволяет в проектах просто менять субд, как один из аргументов за хибер. теперь же 22381259 PetroNotC SharpНикто бд особо не меняет. 22381507 Basil A. SidorovТо, что размещается в JDBC URL после знака вопроса - параметры, специфичные для JDBC-драйвера конкретной базы. Следовательно, вам необходимо открыть документацию PostreSQL JDBC-драйвера и п(р)очитать её. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 08:13 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Вы пишите костыли с применением антипаттерна 'instance of'. Некоторые знают, что есть полиморфизм, но забывают им пользоваться. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 10:53 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Понял свою ошибку, не будет это работать, т.к. связывание при перегрузке статичное. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 11:07 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
вадя теперь же че за хилая аргументация, сменить JDBC URL по-твоему так же тяжело, как переписать стопицот запросов? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 12:54 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Если в Java нет полиморфизма из коробки при перегрузке методов (что в общем-то странно, нетрудно ведь сделать), то реализуем полиморфизм сами, как-то так. 'Instance of' все таки антипаттерн и желательно его заменить полиморфизмом. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 14:16 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Почему поводу терминологии. Вот так выглядит pattern-matching в Haskell. Код: java 1. 2. 3. 4. 5.
Определено 3 функции. На самом деле одна. Просто для разных аргументов. Конечно в Java завялено что это pattern matching для switch. Хорошо. Давайте более дискретный вариант чтобы switch неявно был. Код: java 1. 2. 3. 4.
Тоже паттерн матчинг функций. Вот еще интересный кейс. Просто берем левый или правый аргумент. Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 20:04 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton Привет котаны-бротаны! На дворе стоит пятница и JDK 17. А значит пора обсудить сабж. Не прошло и 25 лет как нам в синтасис наконец-то завезли нужну вешь. Не хочу копи-пастить хабр. Вот тут обзорная статья https://habr.com/ru/post/579178/ Пару мыслей. 1) В своих экспериментах с bigdata я часто использовал подобную конструкцию Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
Только в старом варианте с if-else. И здесь с одной стороны стояли JDBC types а с другой - Apache ORC и наоборот. Вобщем пора рефакторить. Что у вас в продуктовом коде? Как повлияет на качество новое улучшение. 2) Не совсем я согласен с предлагаемой терминологией. Мне кажется что pattern-matching для функций - это достаточно старый термин. Гораздо старее чем Java. И в функциональном программировании он - немного шире чем предлагают в JEP. так это неполноценный патмат. если вообще это патматом можно назвать. вот допустим у меня есть сущность юзер. с полем имя фамилия телефон и адрес. и как мне с этим патматом написать скажем такой кейс Юзер(где имя = вася фамилия = иванов адрес = все равно телефон = все равно) -- как мы с этим недопатматчем засунем туда этот кейс? ответ - при такой реализации вероятно никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2021, 22:10 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2021, 23:52 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Очень крутая фича в сочениии с sealed class обычно раньше использовали Enum так как инстанс офф это дорого,теперь это на уровне языка и это офигенно ,а еще офигенно и тем,что в момент рефакторинга джун будет должен описать все юзкейсы иначе код не скопмпилируется и это тоже очень круто а еще круто это рекорды - не нужно тащить завиисимоти лишние чтобы полуить функционал с анотациями ломбока( который кстати не совсем корректно сейчас работает на 17) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 21:47 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton Код: java 1. 2. 3. 4. 5. 6.
ого. круто хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 22:07 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
надо понимать что твой код не скомпилируется ,так как ты должен обозначить всех наследников класса Object в кейсах ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2021, 22:31 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
andreykaT ого. круто хочу. Это - рабочий код в JDK-17 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 01:09 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
localhost8080 надо понимать что твой код не скомпилируется ,так как ты должен обозначить всех наследников класса Object в кейсах Это - тоже работает. Возможно ты до этого читал про особенности использования Sealed classes. Но Object не объявлен как Sealed и следовательно на него нет строгих ограничений по подтипам. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 01:12 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton \ Это - тоже работает. Возможно ты до этого читал про особенности использования Sealed classes. Но Object не объявлен как Sealed и следовательно на него нет строгих ограничений по подтипам. Ты ошибаешься - убери default и получишь ошибку компиляции- так как не покрыл все возможнные реализации класса Object) тоже самое будет касаться и такой иерархии Код: java 1.
Код: java 1. 2. 3. 4. 5. 6.
как видишь хоть и явно указны ограничения по подтипам это ничего не меняет - ты либо доллжен релизовать всех наследников,либо прописать дефолт ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 11:39 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
В моем варианте использования я все равно не мог покрыть все типы. Да и незачем это было. Для default-секции я просто писал log.warn("Unrecognized dbms datatype received...") и далее - по ситуации я фиксил. Всё равно поддержать все типы данных PG или Oracle было сложно. Да и кому надо поддерживать Oracle/RAW или PG-географические типы? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 12:32 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton log.warn("Unrecognized dbms datatype received...") и далее ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 13:31 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
ещеб онфейлов добавили бы в стримах и прочих обертках типа опшина ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 22:35 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
andreykaT ещеб онфейлов добавили бы в стримах и прочих обертках типа опшина А как ты себе представляешь обработку эксцепшена в стриме? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 16:20 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
Тут мне кажется есть какой-то слом парадигм. Я-бы разделял опасные операции и безопасные. Причем опасные должны иметь логику retry для спасения нужных данных от потерь. Пример - акторная технология. Актор принимает сообщение. Процессит. Падает по ошибкам IO. Супервизор видит что актор упал и снова перезапускает его. При этом сообщение в очереди то что было не обработано до конца - не теряется. И мне кажется что какая-то любая упрощенная логика здесь не верна. Например прервать весь stream - нельзя. Мы потеряем его состояние и часть месседжей которые уже в стрим были заложены. Оборачивать Optional - это по сути игнорировать ошибки I/O и тоже упускать что-то. Я-бы сказал - если хотите Stream - изолируйте опасную логику от безопасной. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 14:22 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton andreykaT ещеб онфейлов добавили бы в стримах и прочих обертках типа опшина А как ты себе представляешь обработку эксцепшена в стриме? меня бы устроило как в скалке. он фейл бла бла бла. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 02:28 |
|
Тяпничный pattern matching for switch в JDK 17
|
|||
---|---|---|---|
#18+
mayton Тут мне кажется есть какой-то слом парадигм. Я-бы разделял опасные операции и безопасные. Причем опасные должны иметь логику retry для спасения нужных данных от потерь. Пример - акторная технология. Актор принимает сообщение. Процессит. Падает по ошибкам IO. Супервизор видит что актор упал и снова перезапускает его. При этом сообщение в очереди то что было не обработано до конца - не теряется. И мне кажется что какая-то любая упрощенная логика здесь не верна. Например прервать весь stream - нельзя. Мы потеряем его состояние и часть месседжей которые уже в стрим были заложены. Оборачивать Optional - это по сути игнорировать ошибки I/O и тоже упускать что-то. Я-бы сказал - если хотите Stream - изолируйте опасную логику от безопасной. стрим и опшинал это по сути одно и то же. онфейл изобразить обрабатыванием опасности внутри динозавром трайкачем из конца восьмидесятых тоже можно и все знают как это работает. но хочется чего то более нормального. во первых онфейла во вторых обертки которая умеет трай или мейби. все это в жаве есть и даже не страшное. но не из коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 02:30 |
|
|
start [/forum/topic.php?fid=59&msg=40103248&tid=2120290]: |
0ms |
get settings: |
26ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
465ms |
get tp. blocked users: |
2ms |
others: | 2740ms |
total: | 3312ms |
0 / 0 |