|
|
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
В java 8 одно и то же можно написать в "классическом" стиле, например, Код: java 1. 2. 3. 4. 5. 6. 7. а можно в "функциональном" стиле Код: java 1. 2. 3. 4. 5. Как пишете вы? Какой вариант вам нравится больше и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 17:49 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Пример не показательный. За такой код надо отрывать лишнее и пришивать на место. При нормальном форматировании и именовании 1й блок будет читаться даже лучше. Пишу на лямдах много. Стримы медленнее чем циклы. Их не удобно дебажить. Зато очень многое можно сократить до безобразия. Те же multi map теперь просто Collectors.groupBy - очень круто. Важно помнить что в нагруженых местах есть смысл отказаться от лямбд и стримов. Для меня интересным вопросом на днях стало такой пример Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Есть ли смысл? Стрим, очевидно, медленнее. И вряд ли читается лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 17:58 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, топик возник из ковыряния в коде проекта. Есть много мест, где прилетает Object и приходится кастить к своему типу. Ну API такое... И вижу два таких подхода. Сам, признаться, ближе к первому, мне лично более читабельно. Но не хочется прослыть ретроградом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:08 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Kripke, Вам прилетают объекты неизвестного типа? И вы вынуждены вручную разбирать их перед каждым кастингом? Просто если объектов много, достаточно одного фасада, чтобы их все прикастить и не писать такую галиматью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:10 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, например, JFace ITreeContentProvider. Все Object. Пример выше - примерно из той же оперы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:15 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Ну то есть на самом деле типов объектов не много, но я вынужден везде кастить к типу, т.к. прилетают Object отовсюду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:16 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Kripke, Пфф. Для этого пишется своя собсвенная строго типизированная модель. А эти гуевые приблудины лишь оборачивают ее чтобы показывать на гуе. И бизнес-логика пишется на модели, а не на объектах, которые вы решили вдруг вытащить из нее через АПИ гуя. Я все еще уверен что тут ошибка проектирования, а не безвыходная ситуация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:19 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
KripkeНу то есть на самом деле типов объектов не много, но я вынужден везде кастить к типу, т.к. прилетают Object отовсюду. Давайте что ли код посмотрим? Объекты эти вы же сами туда помещаете? Покажите примеры с другим объектами? ПОтому как ваш метод, например можно переписать как BeanUtils.getPropertyWithMethodFallback(Person.class, Person::getName, Object::toString) Метод у вас, кстати, NPE выкинет. String.valueOf() можно использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:23 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Там не выкинет NPE. null не передается. Тогда уж Stream.of эксепшн кинет Вообще это немного адаптированный кусок туториала ) но код можно и посмотреть, когда за компом окажусь Пока же моя мысль в том, что там где мне нужно заимплементить некий интерфейс, где везде используется Object в качестве параметров ( а в jface это везде) каста мне не избежать, неважно где. Да вообще мысль не о касте была ) а о том, что стоит ли пихать лямбды, стримы и опшнл везде где позволяет фантазия, или нет. Ваш пример, кстати, тоже отличный. Про конкретно свой напишу через пару часов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 18:52 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
KripkeПока же моя мысль в том, что там где мне нужно заимплементить некий интерфейс, где везде используется Object в качестве Да, куча разных решений может быть. На лямдах вообще можно много чего вкусного делать и помимо функциональных паравозиков. Надо конкретику смотреть. Kripkeпараметров ( а в jface это везде) каста мне не избежать, неважно где. Я JFace не помню. Но Swing тоже про генерики не знает. И там все просто. Если у вас код для ГУИ, то в нем не должно быть if(obj instanceof Person) в принципе. Если у вас код - бизнес логика, то он должен оперировать уже строгими типами, а не Object, которые вы протянули из гуя. Прежде чем я закомичу в репозиторий код if(obj instanceof ...) я 10 раз подумаю, что же это я за лох такой, что не могу полиморфизм применить. KripkeДа вообще мысль не о касте была ) а о том, что стоит ли пихать лямбды, стримы и опшнл везде где позволяет фантазия, или нет. Ваш пример, кстати, тоже отличный. Нет, не стоит везде пихать. Стримоблямбды нужны только там где они значительно сокращают код, либо делают его легко читаемым другим способом. В противном случае мы получаем более медленный и хуже читаемый код. И какой тогда профит? Просто потому что можно? KripkeПро конкретно свой напишу через пару часов Не факт что смогу сегодня или завтра ответить. Но было бы интересно. Кстати, в Java 8 очень херовый опшнл. Там куча косяков. Например, я постоянно сталкиваюсь с тем что нельзя тупо вызвать метод, если значение null. Вроде, в 9 должны полезных исправлений добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 19:18 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Сначала про java 8 BlazkowiczНа лямдах вообще можно много чего вкусного делать и помимо функциональных паравозиков. Да, согласен, к тому что я пытался спросить этим топиком, лямбда имеет не самое прямое отношение. Я имел в виду именно функциональные паровозики ) BlazkowiczКстати, в Java 8 очень херовый опшнл. Там куча косяков. Например, я постоянно сталкиваюсь с тем что нельзя тупо вызвать метод, если значение null. Не совсем понял, что именно вы имеете в виду под нельзя тупо вызвать метод? BlazkowiczСтримы медленнее чем циклы. Их не удобно дебажить. Зато очень многое можно сократить до безобразия. С дебагом согласен. Про то что медленнее - не знал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 22:16 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Kripke, Лямбда и реактивное программирование круто. Паровозики фигня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 22:59 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Kripke, данный юзкейс - скорее антипаттерн. Если брать два варианта в code-review то я пропущу первый вариант а второй верну в доработку. Есть базовый функционал языка который прост и атомарен. Это ключевые слова таке как if-else-instanceof. И он работает и по нему ходит отладчик. И для него есть жесткая оценка complexity. Я ее могу глазами посчитать. Во втором варианте - мы видим нечто, гипертрофированние. И использовать его в продуктиве это все равно что заниматься пере-проектированием. Или как в математике расчету простых задач с вовлечением мат-аппарата двойных и тройных интегралов там где достаточно посчитать площать или объем уже по известным формулам геометрии. Поэтому после того как эйфория от новаторства пройдет и мы начнём "огребать" по полной за такие новаторства (надо хотя-бы посмотреть как раздувается байткод и померять потери на JIT) я ожидаю что господин Шипилёв разразится очередным видекастом на тему печальных последствий от функционального подхода везде где нужно и где не нужно. Я-бы с очень большой надеждой ожидал введения в language новых оп-кодов для расширенных наборов команд процессоров (длинная арифметика и векторизация). А творческие эксперименты в области искусственного интеллекта и решения фундаметальных задачек-проблем (типа расстановка 8 ферзей или решение коммивояжера) предоставил бы решать на Scala. Благо она для этого приспособлена больше чем Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 23:18 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Теперь по касты BlazkowiczЕсли у вас код для ГУИ, то в нем не должно быть if(obj instanceof Person) в принципе. Если у вас код - бизнес логика, то он должен оперировать уже строгими типами, а не Object, которые вы протянули из гуя. Прежде чем я закомичу в репозиторий код if(obj instanceof ...) я 10 раз подумаю, что же это я за лох такой, что не могу полиморфизм применить. Согласен. Собственно сама бизнес логика и оперирует строгими типами. Но вот место стыка бизнес логики и API JFace содержит немало if instanceof. Оговорюсь, в JFace не эксперт, столкнулся совсем недавно. Подглядываю в туториалы и существующий код. Везде касты. Буду рад, если узнаю как это сделать более правильно. Ибо мысль про лоха таки посещает ) Теперь к примеру. Т.к. я уже упомянул дерево, то вот туториал дерева в JFace . Т.е. нужно заимплементить несколько различных Provider-ов. Правда, instanceof там не так много, зато хватает просто смелых кастов. И вот в таких местах, как LabelProvider.getText(), getImage() появляются те самые куски кода, с которых я начал тему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 23:24 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Kripke, Я лично не против кастинга. Тем более в нижнем слое. Вы же компонент приводите. Интересен пример в БЛ. Но вы вроде намного ниже пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 23:57 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Petro123пишитеэто приказ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 12:27 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
OFF grasoff.net, если юмор, то смайлик ставь. А так, попусту, нечего злопыхать и оффтопить из за угла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 12:46 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Petro123если юмор Это не юмор, это вам намекают, что вы не знаете правил русского языка за пятый класс, креативный вы программист. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 22:02 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
FishHook, Адвокат. Я ему намекнул, чтобы не намекал. Вы этот намёк видно не поняли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 22:36 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
KripkeТеперь к примеру. Т.к. я уже упомянул дерево, то вот туториал дерева в JFace . Т.е. нужно заимплементить несколько различных Provider-ов. Правда, instanceof там не так много, зато хватает просто смелых кастов. И вот в таких местах, как LabelProvider.getText(), getImage() появляются те самые куски кода, с которых я начал тему Если бы у меня было 2 или более типов в дереве, то я бы создал свой класс или интерфейс GenericBlablablaProvider<T>. Под каждый конкретный тип - реализацию этого класса. А реализацию для JFace сделал бы в виде прокси, которая бы по типу аргумента через Map<Class, Provider> делегировал бы вызов конкретной реализации для типа. Вам нужно научится разделять логику. Вот этот код, общий для кучи классов. Код: java 1. 2. 3. 4. 5. 6. А Person.getName() - конкретный для конкретного типа. Поэтому если общий код встречается часто, то его нужно выносить. Благо сейчас с лямбдами такие вещи делать легко и приятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 10:13 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
А как написать на стримах аналог full outer join? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:45 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
KripkeА как написать на стримах аналог full outer join? Common SQL Clauses and Their Equivalents in Java 8 Streams ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2016, 16:57 |
|
||
|
Функциональные фичи java 8
|
|||
|---|---|---|---|
|
#18+
Очень похожий вопрос. В groovy есть оператор ?., и можно написать что-то типа a?.b?.c?.d. В java с приходом Optional стало можно написать что-то типа Код: java 1. Что для вас более читабельно/предпочтительно, такая цепочка из map или матрешка из if? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2017, 22:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39369427&tid=2123155]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 374ms |

| 0 / 0 |
