Size: a a a

2020 July 12

A

Aleksandr in pro.jvm
Apache DOG™
Товарищи вот чего спрошу. В джаве разработчики по неосмотрительности оставили инференцию типов дженериков и типов параметров лямбд. В итоге, получается что можно писать так что бойлерплейта типа  var и Borsch borsch = new Borsch(); и Borsch.newBuilder().addSmetana().build(); писать не нужно, если использовать тип Function для почти всего с пачкой функций-комбинаторов. Если обмазать это немутабельными коллекциями то будет совсем красиво(ну, с моей точки зрения). Вот, а насколько в разрез это пойдет с идиоматичной джавой?
Где-то я уже видел эту собаку на аватарке...
источник

A

Aleksandr in pro.jvm
А что Вы тут понимаете под пачкой функции-комбинаторов?
источник

͏

͏͏͏͏ in pro.jvm
Aleksandr
Где-то я уже видел эту собаку на аватарке...
общие группы мб))
источник

AD

Apache DOG™ in pro.jvm
Aleksandr
А что Вы тут понимаете под пачкой функции-комбинаторов?
Я не потроллить, я на серьёзных щах. Ну, например скомпозить A -> F<B>, B -> F <C> для какого-нибуть конкретного F в A => F<C>
источник

A

Aleksandr in pro.jvm
Apache DOG™
Я не потроллить, я на серьёзных щах. Ну, например скомпозить A -> F<B>, B -> F <C> для какого-нибуть конкретного F в A => F<C>
Значит моя догадка была верной?)
источник

AD

Apache DOG™ in pro.jvm
Да, эта собака на аватарке тут писала и довольно давно.
источник

A

Aleksandr in pro.jvm
Apache DOG™
Я не потроллить, я на серьёзных щах. Ну, например скомпозить A -> F<B>, B -> F <C> для какого-нибуть конкретного F в A => F<C>
Может не совсем понял сути, но почему если есть эта пачка функции-комбинаторов, то билдеры не нужны?
источник

AD

Apache DOG™ in pro.jvm
Aleksandr
Может не совсем понял сути, но почему если есть эта пачка функции-комбинаторов, то билдеры не нужны?
Нууу, потому что есть T1 -> T2 -> ... -> TN -> R, где тэшки есть параметры билдера
источник

SS

Shamil Sabirov in pro.jvm
почему бы в билдере не сделать универсальную функцию. которая будет принимать в аргументах функцию/лямбду
источник

AD

Apache DOG™ in pro.jvm
Потому что билдер - не функция, а соль описанного подхода - всё есть функция. Инференция ломается, тайпчек ломается
источник

A

Anton in pro.jvm
Apache DOG™
Товарищи вот чего спрошу. В джаве разработчики по неосмотрительности оставили инференцию типов дженериков и типов параметров лямбд. В итоге, получается что можно писать так что бойлерплейта типа  var и Borsch borsch = new Borsch(); и Borsch.newBuilder().addSmetana().build(); писать не нужно, если использовать тип Function для почти всего с пачкой функций-комбинаторов. Если обмазать это немутабельными коллекциями то будет совсем красиво(ну, с моей точки зрения). Вот, а насколько в разрез это пойдет с идиоматичной джавой?
Вы под не привели, остается тольео гадать.
Если вы имели ввиду патерн GenericBuilder и его использовприе вроде такого:
Person value = GenericBuilder.of(Person::new) .with(Person::setName, "Otto").with(Person::setAge, 5).build();

То, на мой взгляд это вполне себе вписывается в новую идиматику java и не должно вызывать серьезных побочных эффектов совместимости кода.
Альтернативные способы, вроде Limbok @Build уже вмешиваются в компиляцию, и по сути расширяют идиоматику Java, могут вызвать повеление, несовместимое с АОП и другими расширениями.
источник

AD

Apache DOG™ in pro.jvm
Anton
Вы под не привели, остается тольео гадать.
Если вы имели ввиду патерн GenericBuilder и его использовприе вроде такого:
Person value = GenericBuilder.of(Person::new) .with(Person::setName, "Otto").with(Person::setAge, 5).build();

То, на мой взгляд это вполне себе вписывается в новую идиматику java и не должно вызывать серьезных побочных эффектов совместимости кода.
Альтернативные способы, вроде Limbok @Build уже вмешиваются в компиляцию, и по сути расширяют идиоматику Java, могут вызвать повеление, несовместимое с АОП и другими расширениями.
Это в джаву HList завезли?
источник

SS

Shamil Sabirov in pro.jvm
Apache DOG™
Потому что билдер - не функция, а соль описанного подхода - всё есть функция. Инференция ломается, тайпчек ломается
какой еще тайпчек? билдер - это паттерн. это отдельный класс. можете его и в функцию какого либо класса обернуть - если хочется
источник

AD

Apache DOG™ in pro.jvm
Shamil Sabirov
какой еще тайпчек? билдер - это паттерн. это отдельный класс. можете его и в функцию какого либо класса обернуть - если хочется
В этом то и проблема что паттерн
источник

A

Anton in pro.jvm
Apache DOG™
Это в джаву HList завезли?
Если "Это" - GenericBuilder, то нет, народное творчество поверх Java8
источник

AD

Apache DOG™ in pro.jvm
Не думаю что билдер "вообще" вообще содержательно представим в системе типов джавы, хотя...
источник

SS

Shamil Sabirov in pro.jvm
Apache DOG™
В этом то и проблема что паттерн
проблема ради проблемы
как обычно заказчики - могу нажать кнопочку правой рукой. а вот левой чет не получается. у вас СИСТЕМА НЕ РАБОТАЕТ
источник

AD

Apache DOG™ in pro.jvm
Разговоры за вэлью пошли
источник

AD

Apache DOG™ in pro.jvm
За вэлью я и сам сколько хош могу поговорить, мне интересно немного другое
источник

A

Anton in pro.jvm
Apache DOG™
За вэлью я и сам сколько хош могу поговорить, мне интересно немного другое
Так в вопросе приведен только классический код билдера, а альтернативу вы только подразумеваете. Как понять, что вы имеете ввиду?
источник