Size: a a a

2020 April 21

V

Vladimir in pro.jvm
и вообще типобезопасность)
источник

D

Dima in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
просто тут же расплодится куча быдлокодеров, которые всё у себя засилят, и будет сплошное засилье API которые ты никак уже и не починишь без хаков и форков
источник

D

Dima in pro.jvm
источник

D

Dima in pro.jvm
package com.example.geometry;

sealed class Shape {...}
... class Circle    extends Shape {...}
... class Rectangle extends Shape {...}
... class Square    extends Shape {...}
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in pro.jvm
ага, я его перевел, закинул редактору, завтра в 10.00 будет на Хабре =)
источник

D

Dima in pro.jvm
Shape rotate(Shape shape, double angle) {
   return switch (shape) {
       case Circle c    -> c;  // no action needed
       case Rectangle r -> r.rotate(angle);
       case Square s    -> s.rotate(angle);
   }
}
источник

D

Dima in pro.jvm
вот короче
источник

VP

Vladimir Petrakovich in pro.jvm
Dima
Shape rotate(Shape shape, double angle) {
   return switch (shape) {
       case Circle c    -> c;  // no action needed
       case Rectangle r -> r.rotate(angle);
       case Square s    -> s.rotate(angle);
   }
}
Так себе пример, тут бы полиморфизм зашёл
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in pro.jvm
Dima
package com.example.geometry;

sealed class Shape {...}
... class Circle    extends Shape {...}
... class Rectangle extends Shape {...}
... class Square    extends Shape {...}
честно говоря, мне всегда даже final мешал. Потому что понаставят final-ов на всякий говнокод, а как мне его дальше править-то?

приходится идти и целиком копировать говнокод к себе в код и манки-патчить

и потом при обновлениях библиотеки весь твой пропатченный код ломается, и ты каждый раз идёшь и руками снова копипастишь и мерджишь

и потом патчи в вики хранишь, и объясняешь из уст в уста чего там как мерджить

а библиотеки могут обновляться раз в неделю

может ну на фиг весь этот контроль доступа

можно описать как-то ПОЖЕЛАНИЯ автора к тому, как должен использоваться код, но не енфорсить их компилятором
источник

VP

Vladimir Petrakovich in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
честно говоря, мне всегда даже final мешал. Потому что понаставят final-ов на всякий говнокод, а как мне его дальше править-то?

приходится идти и целиком копировать говнокод к себе в код и манки-патчить

и потом при обновлениях библиотеки весь твой пропатченный код ломается, и ты каждый раз идёшь и руками снова копипастишь и мерджишь

и потом патчи в вики хранишь, и объясняешь из уст в уста чего там как мерджить

а библиотеки могут обновляться раз в неделю

может ну на фиг весь этот контроль доступа

можно описать как-то ПОЖЕЛАНИЯ автора к тому, как должен использоваться код, но не енфорсить их компилятором
На пожелания все забьют, и код сломается от того, что автор либы не ожидал, что там кто-то что-то решит расширить, где не предусмотрено.
Ну и раз там обновления раз в неделю, закинул PR и всё.
источник

g

guga in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
честно говоря, мне всегда даже final мешал. Потому что понаставят final-ов на всякий говнокод, а как мне его дальше править-то?

приходится идти и целиком копировать говнокод к себе в код и манки-патчить

и потом при обновлениях библиотеки весь твой пропатченный код ломается, и ты каждый раз идёшь и руками снова копипастишь и мерджишь

и потом патчи в вики хранишь, и объясняешь из уст в уста чего там как мерджить

а библиотеки могут обновляться раз в неделю

может ну на фиг весь этот контроль доступа

можно описать как-то ПОЖЕЛАНИЯ автора к тому, как должен использоваться код, но не енфорсить их компилятором
_а_че_жили_же_так
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in pro.jvm
Vladimir Petrakovich
На пожелания все забьют, и код сломается от того, что автор либы не ожидал, что там кто-то что-то решит расширить, где не предусмотрено.
Ну и раз там обновления раз в неделю, закинул PR и всё.
> , закинул PR и всё.

у меня там может быть проприетарный код

например, все приводят в качестве примеров сраную графическую библиотеку

если у меня мой приватный коммерческий движок, унаследованный от опенсорсного, то хрен я с маслом а не PR на свою реализацию Shape :)
источник

VP

Vladimir Petrakovich in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
> , закинул PR и всё.

у меня там может быть проприетарный код

например, все приводят в качестве примеров сраную графическую библиотеку

если у меня мой приватный коммерческий движок, унаследованный от опенсорсного, то хрен я с маслом а не PR на свою реализацию Shape :)
> у меня там может быть проприетарный код
Тогда боль неизбежна 🤷‍♂️
источник

V

Vladimir in pro.jvm
Хорошая статья на тему https://eax.me/adt-and-traits/
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in pro.jvm
У меня на работе был такой случай:

- Была самописная транспортная библиотека поверх Кафки

- У нее была куча интерсепторов, которые по сути классы с методом intercept

- Автор одного из самых важных интерсепторов, из соседнего отдела, написал его в виде одного класса с одним-единственным метдом intercept, размером на 10 экранов. Никакого деления на подфункции, никакого ооп, ничего, один огромный метод-простыня

- У меня был в проекте кейс, который не покрывается этим интерсептором

- Автор знал про мой кейс, но считал, что мой кейс вредный, и проект у меня вредный, и помогать он мне не будет

- Поэтому каждое обновление библиотеки (которое временами было по нескольку раз в день) я шел и проверял, не поменялся ли сраный файлик. Копировал этот метод на десять экранов и менял в нем три строчки.

- И так два года.

- Такой коллега и такой случай был не единственный

- Поэтому есть некоторые сомнения при появлении любой безальтернативной верификации на уровне компилятора
источник

VP

Vladimir Petrakovich in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
У меня на работе был такой случай:

- Была самописная транспортная библиотека поверх Кафки

- У нее была куча интерсепторов, которые по сути классы с методом intercept

- Автор одного из самых важных интерсепторов, из соседнего отдела, написал его в виде одного класса с одним-единственным метдом intercept, размером на 10 экранов. Никакого деления на подфункции, никакого ооп, ничего, один огромный метод-простыня

- У меня был в проекте кейс, который не покрывается этим интерсептором

- Автор знал про мой кейс, но считал, что мой кейс вредный, и проект у меня вредный, и помогать он мне не будет

- Поэтому каждое обновление библиотеки (которое временами было по нескольку раз в день) я шел и проверял, не поменялся ли сраный файлик. Копировал этот метод на десять экранов и менял в нем три строчки.

- И так два года.

- Такой коллега и такой случай был не единственный

- Поэтому есть некоторые сомнения при появлении любой безальтернативной верификации на уровне компилятора
И проблема этой великолепной ситуации конечно же в final...
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in pro.jvm
Vladimir Petrakovich
И проблема этой великолепной ситуации конечно же в final...
ну в данном случае проблема в том, что на уровне Java нельзя взять метод суперкласса и пропатчить его на уровне конкретной строчки

точней, можно, но сложно, и в данном случае проще ходить и руками патчить эту строчку
источник

DP

Denis Pavlyuchenko in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
ну в данном случае проблема в том, что на уровне Java нельзя взять метод суперкласса и пропатчить его на уровне конкретной строчки

точней, можно, но сложно, и в данном случае проще ходить и руками патчить эту строчку
в данном случае проблема, что за 2 года не был решен вопрос с коллегой)
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in pro.jvm
Denis Pavlyuchenko
в данном случае проблема, что за 2 года не был решен вопрос с коллегой)
это нормально, когда у вас с коллегами противоположные интересы. Система сдержек и противовесов. На этом всё общество устроено.
источник

V

Vladimir in pro.jvm
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
У меня на работе был такой случай:

- Была самописная транспортная библиотека поверх Кафки

- У нее была куча интерсепторов, которые по сути классы с методом intercept

- Автор одного из самых важных интерсепторов, из соседнего отдела, написал его в виде одного класса с одним-единственным метдом intercept, размером на 10 экранов. Никакого деления на подфункции, никакого ооп, ничего, один огромный метод-простыня

- У меня был в проекте кейс, который не покрывается этим интерсептором

- Автор знал про мой кейс, но считал, что мой кейс вредный, и проект у меня вредный, и помогать он мне не будет

- Поэтому каждое обновление библиотеки (которое временами было по нескольку раз в день) я шел и проверял, не поменялся ли сраный файлик. Копировал этот метод на десять экранов и менял в нем три строчки.

- И так два года.

- Такой коллега и такой случай был не единственный

- Поэтому есть некоторые сомнения при появлении любой безальтернативной верификации на уровне компилятора
ты прямо в либе заменял код что ли?
источник