1. JavaScript / Говнокод #17264

    +157

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    function report1(req, res, next, type) {
                    if (!req.query || !req.query.name) {
                            var ct = "Income statement";
                            if (type == 'pieflow')
                                    ct = 'Pie flow chart';
                            else if (type == 'barflow')
                                    ct = 'Bar flow chart';
     
                            res.redirect(req.url + "?name=" +  ctx.i18n(req.session.apiToken, 'cash', ct));
                            return;
                    }
     
                    var pid = "reports-" + type + "-" + req.query.name;
                    var vtabs,data,reportSettings;
                    async.waterfall([
                            function (cb1) {
                                    async.series([
                                            function(cb2) {
                                                    webapp.guessTab(req, {pid: pid, name:req.query.name, url:req.url}, cb2);
                                            },
                                            function(cb2) {
                                                    webapp.getTabSettings(req.session.apiToken, pid, cb2);
                                            }
                                    ],
                                    function (err, results) {
                                            cb1(null, results[0], results[1]);
                                    });
                            },
                            function (vtabs_, reportSettings_, cb1) {                              
                                    vtabs = vtabs_;
                                    reportSettings = reportSettings_;
                                    if (_.isEmpty(reportSettings) || !reportSettings.version || (reportSettings.version != reportSettingsVersion)){
                                            reportSettings = getDefaultSettings(req.query.name);           
                                            webapp.saveTabSettings(req.session.apiToken, pid, reportSettings, function(err){
                                                    if (err) console.log(err);
                                            });
                                    }
                                    calculateGraphData(req.session.apiToken,type,reportSettings,cb1);
                            },
                            function(data_,cb1){                           
                                    data = data_;                          
                                    cb1()
                            },
                            function(){                                                                            
                                    data.tabs = vtabs;
                                    data.pmenu = {name:req.query.name,
                                            items:[{name:webapp.ctx.i18n(req.session.apiToken, 'cash','Page settings'),id:"settings",href:"#"}]}
                                    data.reportSettings = reportSettings;
                                   
                                    res.render(__dirname+"/../res/views/report", data);
                            }],
                            next
                    );
            };

    Прислали мне, значит, вступительное задание на должность разработчика node.js, а там гигантский проект, в который нужно дописать модуль, который выглядит весь так же ужасно, как эта функция. Долго порывался написать, что это самый ужасный код, который я когда-либо видел. http://pastebin.com/4NYccg3Y вот ссылка на весь файл, кому интересно, весь проект палить не буду, но скажу, что он большой и ужасный.

    Запостил: Twizty, 06 Декабря 2014

    Комментарии (33) RSS

    • При замене табуляции на 8 пробелов любой код страшный...
      Ответить
      • А нужно не табуляцию использовать, а пробелы.
        Ответить
        • Причём 2.
          Ответить
          • Почему не 4?
            Ответить
            • Потому что квадрат.
              Ответить
              • Тогда лучше табуляцию делать простыми числами: первый уровень - два пробела, второй - три пробела, третий - пять пробелов и т.д. Чтобы точно квадратов не получить.
                Ответить
                • > два пробела, второй - три пробела, третий - пять
                  Отступ фибоначчи?
                  Ответить
                  • О, фибоначчи тоже хорошо, первый (и практически единственный, за исключением 1) квадрат - 144, столько пробелов даже фанатики не наставят.
                    Ответить
                    • >>Тогда лучше табуляцию делать простыми числами: первый уровень - два пробела, второй - три пробела, третий - пять пробелов и т.д. Чтобы точно квадратов не получить.
                      >>фибоначчи тоже хорошо
                      Блин. Это великолепно придумано!
                      Смотрите, ведь определённый профит есть: мы побуждаем такой идентацией не использовать глубокую вложенность.
                      Типа чем больше вложенность, тем больше платим экранного места — это вынуждает программиста разбивать код на меньшие блоки.

                      Прозреваю совершенно новый вид табосрачей - с какого члена начинать отсчёт.
                      Кто-то выступает за 2 пробела, кто-то за 3, кто-то за 5.
                      Ответить
                • Имелось в виду, что отступ в 2 пробела в большинстве моноширенных шрифтов представляет собой квадрат, т. е. ширина двух символов равна высоте строки.
                  Ответить
                  • Нельзя так резко останавливать важную дискуссию!
                    Ответить
                    • Дискуссия продолжается в соседней ветке)))
                      Ответить
    • report2-то есть?
      Ответить
    • > а там гигантский проект, в который нужно дописать модуль, который выглядит весь так же ужасно, как эта функция
      Люди честно показали, с чем именно вам у них придется работать, а вы на них бочку катите... Не надо так.
      Ответить
      • довольно опрометчиво с их стороны
        Ответить
        • Просто экономят своё и чужое время. А то кто-нибудь слабонервный устроится, и в первый же день сбежит свалив стул и проломив входную дверь.
          Ответить
          • кэп подсказыват, что хорошо на node.js сделать гораздо сложнее, чем плохо
            поэтому овер 146% ну хорошо, огромная доля проектов выглядят ровно так же
            и каждый node.js-ыксперт наблюдает такую фабрику яичной лапши каждый день, в т.ч. в своей любимой ide
            Ответить
            • Мне вообще весь этот хайп вокруг node.js представляется особо извращённой формой мазохизма - писать многопользовательскую прикладнуху на языке, в котором нету ни async/await, ни дешевых тредов/процессов, ни короутин, а есть только рукопашный continuation passing style аля лапшичка...

              Да простят меня нодовцы.
              Ответить
              • Серверный js - пиздец.
                Единственный плюс - возможность шарить серверную и клиентскую логику, используя одни и те же модули.
                Ну и писать весь проджект на одном язычке.
                Ответить
              • Node.js выглядит очень похоже на ПХП4, в том смысле, что на 4 писали восновном без классов, и только к концу существования этой версии продвинутые ПХП-программисты начали задумываться о модулях, распределении полномочий между частями програмы и сокртытии информации - и взялись за классы, как самое простое решение для этой проблемы.
                Вот Нода еще не дошла до той кондиции, когда люди это начнут понимать. Пока что нет устоявшихся приемов в языке, и програмы которые на этом пишут выглядят как набор произвольно надерганых решений из практики других языков (обычно плохо понятых ПХП и Руби).
                Ответить
              • На базе ES5 и правда был мазохизм. С 0.11 появились генераторы из ES6. В ES7 будут async/await, c препроцессорами их можно использовать уже сейчас http://goo.gl/9ByqLj . Абсолютно то же самое можно реализовать и без препроцессора, на базе генераторов, обещаний и простой обёртки - вместо async function( - spawn(function*(, вместо await - yield.
                Ответить
                • Ну тут радует, что, в отличие от унылого браузерного жс, можно поставить свежую версию ноды и не париться с поддержкой старых.
                  Ответить
                  • > в отличие от унылого браузерного жс, можно поставить свежую версию ноды и не париться с поддержкой старых.
                    Так тогда пропадает вся соль ноды.
                    Мы пишем бизнес-логику валидации данных — она должна быть идентичной на клиенте и на сервере.
                    Мы юзаем один и тот же код и там, и сям. И толку, раз браузер не поддерживает новых фич?
                    Опять получим джве версии кода: один для новой ноды, другой — кроссбраузерный, и еблю с обеспечением их когерентности.
                    Ответить
                    • Ну в бизнес-логике валидации нам не нужны генераторы и т.п. Ее вполне можно сделать переносимой (поплевавшись на IE8).

                      А вот юзать генераторы вместо лапшички из function'ов браузеры еще лет 5 не позволят, а в ноде можно уже и сейчас.
                      Ответить
              • Ты ебанулся у петуха прощения просить?
                Ответить
    • Вендоблядки страдают, в vim открывать нужно и всё будет красиво.
      Ответить
    • Гигантский проект, в который нужно дописать модуль, который выглядит весь так же ужасно, как эта функция, которая выглядит так же ужасно, как весь ЭКМАСкрипт.
      Ответить
    • Я лишь опустил взгляд на его пятую точку, на которой были надеты спортивные шорты с эмблемой нашей футбольной команды. "Вперёд, тигры!"
      Ответить

    Добавить комментарий