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

    +158

    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
    $('.price_input', this.getDummy()).on('keydown', function (e) {
        if (e.keyCode == 13) {
            e.preventDefault();
        }
    
        var charCode = e.keyCode, char = e.originalEvent.keyIdentifier;
        if ((((charCode == 188) && (!char || char == 'U+002C')) || (charCode == 190) && (!char || char == 'U+002E')) && ($(this).val().indexOf('.') < 0) && ($(this).val().indexOf(',') < 0)) {
            return true;
        }
    
        if ((charCode >= 37 && charCode <= 40) || (charCode == 46) || (charCode == 8) || (charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)) {
            return true;
        }
    
        e.preventDefault();
    });

    Код ведущего front-end разработчика.
    Это далеко не самый длинный if в проекте.
    После месячного рефакторинга подобного шедевра я готов открыть компанию по сбору денег для программистов инвалидов.

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

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

    • И что тут не так?
      Ответить
      • Огромный if в одну строку.
        Вместо использования словаря в проверке используются magic numbers.
        Дважды используется $(this) только для получения value элемента и проверки его на запятую и точку, хотя можно было бы юзать регулярку.
        В условие дважды встречается проверка наличия char.
        И рас уж ребята подключили jquery, они могли бы использовать e.wich, вместо e. keyCode.

        Я не знаю как у других, но мне кажется это не нормальной практикой
        Ответить
      • Это можно было сделать регулярным выржением, было бы короче и понятнее.
        Ответить
        • Some people, when confronted with a problem, think
          “I know, I'll use regular expressions.”
          Now they have two problems.
          Ответить
          • Some people, when confronted with a problem, think
            “I know, I'll use %SOME_TECHNOLOGY%.”
            Now they have two problems. (c) Neosilator of %SOME_TECHNOLOGY%
            Ответить
            • > Neosilator

              Jamie Zawinski, безусловно, не осилил регексы.
              Ответить
              • Ну раз Zawinski так сказал, то всё: больше регулярками пользоваться не буду. Вместо этого буду на каждом форуме говорить что регулярки это говно, потому что так сказал Zawinski.
                Ответить
                • Это сказал человек, который половину своей сознательной жизни писал на Perl.
                  И вообще он няша — у него есть великолепные афоризмы и набросы на кресты.
                  Ответить
              • Где-то читал что вариации цитаты про sed и awk еще бородатее.
                Лично я бы добавил сюда autotools, если make — проблема, то с autotools их станет две.
                Ответить
      • Всмысле Вас вполне устраивает код
        ((charCode >= 37 && charCode <= 40) || (charCode == 46) || (charCode == 8) || (charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105))

        ?
        Ответить
    • Кто не знает charCode - тот чмо.
      Ответить
      • Выучите наизусть весть четырехбайтовый юникод, и особенно символ U+1F4A9
        Ответить
        • У меня в шрифтах нету этой няшноты ;(

          💩
          Ответить
          • У меня много шрифтов на операционке, будут пробовать &#x1f4a9;
            Ответить
            • Кстати, откуда там цвет берётся? Он заложен в юникод как одна из составляющих символа, или это самовольные костыли от авторов браузеров браузера специально для пользователей эмоджи-питушни?
              Ответить
              • Цвета там никакого нету:)



                http://postimg.org/image/qtu1yt8sv/
                Ответить
                • У некоторых символов цвет есть (например, у красного и зелёного яблока):
                  http://www.alanwood.net/unicode/miscellaneous-symbols-and-pictographs.html

                  Но только цвет почти нигде не работает. Даже Твиттор теперь заменяет эмодзи картинками, чтобы гарантировать одинаковое отображение на всех платформах.
                  Ответить
          • От кстати на винде есть "segoe ui symbol", в нем есть говно
            http://postimg.org/image/qtu1yt8sv/
            Ответить
            • Сейчас кто-то расшифрует затертое по ширине символов.
              Ответить
        • Ммм... Мусье знает толк в извращениях.
          Ответить

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