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

CCW - полуработоающая хрень. Я пытался бороться с багами, списывался с автором в гугл группах, он правил. В общем, CCW хоть как-то работает. Но в итоге перешёл на emacs. LightTable - немного не то, но симпатично. Идейный плагин не пробовал, но коллега его даже запустить не смог. В итоге тоже на емаксе.

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

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

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

Конечно слышал. Но ты и вправду считаешь, что код без подсветки должен читаться? Ну и следующий вопрос заодно - а зачем?

turtle_bazon ★★★★★
()

До ТСа только сейчас дошло.

На этом фоне смешно читать писающих кипятком от явы школоло типа вертехуя и прочих биореакторов, поющих оды этому «самому лучшему языку».

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

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

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

Я там описывал, что беглого взгляда недостаточно. Приходится вчитываться в то, что делает код. Это уменьшает понятность как таковую, хоть и не является непонятным для «интерпретатора». А почему код непонятен, на то есть объективные причины - загромождение кучи символов. И его действительно беглым взглядом предварительно не оценишь.

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

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

turtle_bazon ★★★★★
()

Збс код не слушай хейтеров.

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

Некоторые коллеги ровно обратного мнения при этом.

migesok
()
Ответ на: комментарий от stevejobs

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

Это избавит от необходимости вкуриваться, например, что же такое «p_bol» «p_mem» в приведенном выше коде?

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

огромный цикл сокращается до какого-нибудь (map ...). Хочешь сказать, что в двух скобочках больше символов, чем в огромном цикле?

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

мне кажется, тут есть проблема в том, что под фразой «Приходится вчитываться в то, что делает код» люди понимают «в своем уме превратить все эти конструкции в привычные циклы». Или вот как Legioner - расставить промежуточные типы, дать промежуточным понятиям имена. Так вот этого делать НЕ надо. Вся эта промежуточная информация спрятана - всё, ее нет больше. Нужно думать только о смысле действия вообще. Например мы берем одно множество и отображаем на другое - как будет происходить отображение, в каком виде храниться в машинном смысле - всё равно, важно что мы получили какое-то отображение.

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

Ты меня не понял. Я не предлагаю переписать всё в императивном виде в обязательном порядке. Я говорю, что код должен быть более читаем, чем представлен ТС. А как он это сделает, с помощью каких конструкций - это уже дело десятое. Код в шапке ну не сильно легко читаем.

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

Ну и они тормозят сильнее блямб.

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

Я говорю, что код должен быть более читаем, чем представлен ТС

Там 3/4 нечитаемого - из за древности и довольно таки корявости явовского reflection api.

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

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

Пользуюсь cursive clojure. Он пока бета-версия, но уже весьма неплох.

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

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

А как же light-table и eclipse?

anonymous
()

Нормальный такой флюент интерфейс и ФПшный код. Шли колегу к херам.

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

Хотел посмотреть, но пока ещё руки до него не дошли. Как посмотрю, выскажу своё фи.

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

lighttable хоть и косит и под нормальный редактор, и под емакс, в итоге не является ни тем, ни другим. Некоторые люди им пользуются. И им, вроде как, нравится. Мне нет. Есть там фатальные недостатки. Какие, правда, сейчас уже не помню, чтобы точно сказать, помню только, что не подошёл. Эклипсовым CCW я пользовался около года. Но томоза и пожирания памяти заставили мне от него отказаться.

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

Отличный код на мой взгляд.

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

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

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

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

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

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

О, наконец то анонимные пиздоболы повылезали, я так этого ждал ;)

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

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

Ойой, кавайное кисо вякнуло с умным видом свое ничтожное мнение, как интересно.

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

Понятие нормальной компании - оно у всех разное. Есть большие компании, которым важен _предсказуемый_ результат. При этом на многие другие показатели можно насрать с высокой башни. Например на сроки, затраты итд. Тогда да, любого, выбивающегося из серой массы быстренько загоняют обратно либо увольняют. Мне в таких откровенно скучно.

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

Эклипсовым CCW я пользовался около года. Но томоза и пожирания памяти заставили мне от него отказаться.

Если это единственный недостаток, тогда им вполне можно пользоваться. Тормоза, как показывает практика пользования явовских сред лечатся выделением пары-тройки гигов оперативы. Которой в общем и не жалко особо.

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

Оно тормозило на i7 с 32 Гб оперативы. И свыделенными под эклипс 16 Гб. Сейчас, может, уже получше. Я более полугода его не видел.

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

Вспомнил. Оно на aot довольно сильно тормозило, а иногда и вовсе подвисало. Но это глюк лично CCW, который автору описывался и он, вроде бы, его исправил. Судя по отзывам в гугл группе. Но ещё я посмотрел видюхи с емаксом и то, как он может работать, и оказалось, что CCW довольно ущербный. Единственный плюс, который для тебя сейчас не проявтся - это наличие дебаггера. Всё остальное субъективно хуже и малофункционально.

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

Я пока на чем то сильно сложнее helloworld его не тыкал конечно, но вроде нормально работает, с дефолтными эклипсовыми настройками. i7, причем сильно кастрированный, мобильный с 2мя ядрами, 16g оперативки, ssd

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

Не, тяжелые наркотики - не наш метод. Вот если бы ты предложил перейти на кислоту...

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

Ну уже отписался. При использовании aot было эпичное тормозилово. Но отказался от CCW я по причине большей функциоональности в имаксе.

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

Понятно. Спасибо за подробное объяснение.

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

У меня всего два вопроса:

getBeansWithAnnotation это ТС сам придумал или в чужом коде такое?

А назвать что-то m, a, fm и т.д. это ТС так локальные объекты называет от балды?

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

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

getBeansWithAnnotation это ТС сам придумал или в чужом коде такое?

Не сам, это метод спрингового контекста. Знакомый апишник для 90% яверов.

А назвать что-то m, a, fm и т.д. это ТС так локальные объекты называет от балды?

не совсем от балды, просто первые буквы от entry, method, found method, annotation. Совершенно не вижу смысла давать длиные имена локальным переменным лямбды. Да и внутренним переменным функции, если ее тело меньше 10 строчек.

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

Все нормально, Stream API как раз для такого и придумали. Такой код короче и понятнее, чем то же самое до Java 8.

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

Ну я то тоже считаю, что это нормально (иначе бы не писал в таком стиле). Но судя по количеству комментариев из серии «убей себя ап стену» не все люди разделяют такую точку зрения.

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

не совсем от балды, просто первые буквы от entry, method, found method, annotation. Совершенно не вижу смысла давать длиные имена локальным переменным лямбды. Да и внутренним переменным функции, если ее тело меньше 10 строчек.

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

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

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

Solace ★★
()

конкретно приведенный более-менее нормальный, но я бы посоветовал прочитать документацию на java.util.Map.values(), чтобы не было фейспалмового кода

entrySet().stream().map(Map.Entry::getValue)
и перестать использовать названия классов из JDK для своих классов, но оба эти замечания не имеют отношения к переходу на lisp/clojure/fp

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

конкретно приведенный более-менее нормальный, но я бы посоветовал прочитать документацию на java.util.Map.values(), чтобы не было фейспалмового кода

Я в курсе про values(), просто раньше метод чуть по другому работал, и там нужны были ключи в алгоритме, а потом не довычистил.

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

да и тот же reduce выполнятется относительно мутабельного объекта.

Наверно можно и так реализовать reduce, но зачем? С другой стороны, как ни странно, даже с таким решением reduce может быть pure function.

Ritmik
()

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

Если перейдешь, то такой метод и не понадобится.

Ritmik
()

практически все написано примерно вот в таком стиле

Кстати, это одна из проблем называется «Kingdom of Nouns», из-за которой невозможно писать нормальный функциональный код на языках типа джавы или скалы: http://steve-yegge.blogspot.de/2006/03/execution-in-kingdom-of-nouns.html .

Ritmik
()
Ответ на: комментарий от stevejobs

вероятно все эти фичи в Java8 добавили как раз затем, что перейти на кложур нереально?

Интересно, какие фичи добавили в восьмую джаву? Все, что вижу, это синтаксический сахар для анонимных классов с одним методом, которые они почему-то называют лямбдами. «Потоки» это вообще эпик фэйл.

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

зы. Говорю про язык java, а не про саму jvm.

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