LINUX.ORG.RU

А может пора переходить на лисп?

 ,


1

2

Меня тут обвинил коллега в том, что я на любом языке пишу как на лиспе. Я посмотрел свой код в новом проекте и понял что обвинения были не на совсем пустом месте, практически все написано примерно вот в таком стиле

    public List<MethodDescription> available(MethodType type) {
        return ctx.getBeansWithAnnotation(MethodProvider.class).entrySet()
            .stream()
            .map(Map.Entry::getValue)
            .flatMap(e -> Arrays.asList(e.getClass().getMethods()).stream())
            .filter(m -> m.getAnnotation(Method.class) != null && m.getAnnotation(Method.class).type() == type)
            .map(fm -> fm.getAnnotation(Method.class))
            .map(a -> new MethodDescription(
                a.value(),
                src.getMessage("method." + a.value(), null, a.value(), dh.getLocale()),
                src.getMessage("method." + a.value() + ".description", null, a.description(), dh.getLocale())))
            .collect(toList());
    }

Может действительно пора переходить на тот же clojure?

Перемещено maxcom из talks

★★★★

Ответ на: комментарий от Nagwal

К тому же раз уж ввели в восьмерке яве лямбды, то так писать стало вполне себе кошерно.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от alienclaster

Если все, это полтора задрота с ЛОРа, то у меня для тебя есть пренеприятнейшие известия ;)

Nagwal ★★★★
() автор топика

Нормальный код, оптимальный по соотношению длина/понятность.

crowbar
()

А может пора переходить на лисп?

Трава уже не вставляет?

Может действительно пора переходить на тот же clojure?

это же некошерный не-лисп. сейчас прибежит анонимус с цопипастой про хиккующего выбл...дка Хикки

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от Siado

Не, яваскрипт - бяка редкостная. Всегда матерюсь, когда приходится клиентский код писать.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Virtuos86

Трава уже не вставляет?

Вставляет, но мне после нее работается плохо в течении нескольких дней, в голове блаженная пустота. Поэтому злоупотребить ей получается нечасто.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Solace

Это невозможно по двум причинам:

а) на этом проекте я главный

б) я тупо больше и сильнее =)))

Nagwal ★★★★
() автор топика

Может действительно пора переходить

Если ещё можешь ходить - переходи немедленно. Скоро может быть поздно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Если ещё можешь ходить - переходи немедленно. Скоро может быть поздно.

Коллеги-жаберы переломают ему ноги за такой код?

aidan ★★★★
()
Ответ на: комментарий от tailgunner

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

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Ну вообще чейнинг говно, потому что плохо отлаживается, ведь все в одном огромном statement'е. А еще мапы на мапах и иммутабельные преобразования это конечно прикольно, но не очень производительно. Хотя о какой производительности можно говорит, если тут джава вместо языка.

hlebushek ★★
()

На Lisp это не похоже. Думаю это неплохо бы смотрелось в for-блоке Scala, особенно если добавить сахара через implicit'ы

maxcom ★★★★★
()

.

Сфоткай тип композиция.

Kuzy ★★★
()
Ответ на: комментарий от hlebushek

Ну вообще чейнинг говно, потому что плохо отлаживается, ведь все в одном огромном statement'е

Отлаживается, отлаживается. Не идеально, но по внутренним лямбдам дебагер вполне способен сделать отдельный breakpoint.

А еще мапы на мапах и иммутабельные преобразования это конечно прикольно, но не очень производительно

Да пофиг на производительность. Это же не прошивка к микроконтроллеру чтобы насчет нее париться. Все равно все в итоге все в базу и io упрется.

Хотя о какой производительности можно говорит, если тут джава вместо языка.

Может мне еще высоконадежные системы на сишечке писать?

Nagwal ★★★★
() автор топика
Ответ на: комментарий от maxcom

Думаю это неплохо бы смотрелось в for-блоке Scala, особенно если добавить сахара через implicit'ы

Ну, когда я пробовал писать на скале - то примерно то же самое выходило. На нее обратно переходить я не хочу по совершенно другим причинам.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от hlebushek

А сторонними библиотеками? Вроде в свежих стандартах лямбды уже впихнули, а такие штуки при их наличии прям напрашиваются быть сделанными. Без gc конечно придется слегка потрахаться, но не вижу ничего невозможного.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

И, кстати, они не совсем немутабельные. Никто не мешает внутри лямбд дергать методы, модифицирующие состояние, да и тот же reduce выполнятется относительно мутабельного объекта.

Nagwal ★★★★
() автор топика

Код читается сложно и требует от читателя знания типов всех используемых API. Если это не код на выброс, а планируется дальнейшее развитие и сопровождение, его лучше переписать в императивном стиле. Хороший пример, как неуместное использования функционального стиля превращает код в лапшу. И имена как у студента первого курса - a, b, h, f, fm. Мой препод когда то не принимал такой код, заставлял давать нормальные имена.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Nagwal

что не устраивает в приведенном фрагменте кода?

В собственно коде - чейнинг. Такое впечатление, что изначально эта кишка была разбита на стадии, отлажена, а потом склеена. Но в любом случае - зачем лепить всё в один оператор?

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

P.S. на Лисп этот код не похож - скорее, это однострострочник на шелле.

tailgunner ★★★★★
()

А какая вообще ниша у LISP, кроме как плагины к емакс писать? В вебе не используется, десктопные приложения особо не понаписать, научные расчеты тоже. В чем прикол?

Siado ★★★★★
()
Ответ на: комментарий от Legioner

Код читается сложно и требует от читателя знания типов всех используемых API

Любая среда показывает эти типы всплывающей подсказкой, благо они строго определены. Это же не динамический язык.

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

Это готовый метод, делающий ровно одну задачу - находящий все методы спринговых бинов, помеченных кастомной аннотацией. Так что он и не на выброс и не на поддержку (поскольку поддерживать там нечего).

Хороший пример, как неуместное использования функционального стиля превращает код в лапшу. И имена как у студента первого курса - a, b, h, f, fm. Мой препод когда то не принимал такой код, заставлял давать нормальные имена.

Зачем в лямбдах нормальные имена? Это же строго локальные переменные, использующиеся ровно в одной строчке.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Siado

Да фиг знает, какая у него ниша. У меня вот сейчас появилась задача: забрать данные из монги, хитро их посчитать/потрансформировать и сформировать эксель. Думаю попробовать написать ее на кложуре.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Любая среда показывает эти типы всплывающей подсказкой, благо они строго определены. Это же не динамический язык.

Код должен читаться без помощи среды.

Это готовый метод, делающий ровно одну задачу - находящий все методы спринговых бинов, помеченных кастомной аннотацией. Так что он и не на выброс и не на поддержку (поскольку поддерживать там нечего).

Не бывает кода, который не поддерживается. Или проект мёртвый, или любую строчку когда-нибудь изменят. Твой код точно будет меняться.

Зачем в лямбдах нормальные имена? Это же строго локальные переменные, использующиеся ровно в одной строчке.

Есть только два однобуквенных имени, которые можно использовать - «i» и «j», как индексы. Всё остальное должно иметь нормальные имена (исключением может быть математический алгоритм с описанием во внешнем документе).

Legioner ★★★★★
()

Нормальный код. На мой вкус, конечно, не стоит разбивать на столько клочков то, что можно сделать в одном `map`, но и так пойдет.

anonymous
()
Ответ на: комментарий от hlebushek

в мой Сиплюсплюс функций для иммутабельных преобразований не завезли.

Boost.Range в части адаптеров.

Или ключевой фразой было «в мой Сиплюсплюс»?

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)

переходи, но не надо так на джаве писать, это уродство

rusich
()
Ответ на: комментарий от Siado

В чем прикол?

Зато ЧСВ норм тешит и на ЛОРе есть что заявить, а в остальном он бесполезен.

umren ★★★★★
()

Ни красоты, ни выразительности. Язык определённо должен заставлять своего юзера писать красиво и не позволять *такое*.

post-factum ★★★★★
()
Ответ на: комментарий от bookman900

Ну думаю...big data еще может быть потребует clojure, и в придачу LISP

Так здесь уже давно рулят R и другие специализированные языки.

Siado ★★★★★
()

Просто твои коллеги не осилили фп, твой код нормальный. Но стоит переходить на Scala :)

dizza ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.