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

    +161

    1. 1
    2. 2
    3. 3
    function toInt(number) {
        return number && + number | 0 || 0;
    }

    http://ideone.com/igo7ag

    Минут 10 назад меня ошарашили фразой о методе toInt(), который, якобы, есть в javascript. Гугл выдал всего одну ссылочку, в которой говорится о нем: http://javascript.ru/forum/misc/22100-funkciya-toint-razyasnite-pozhalujjsta-neskolko-momentov.html. Увидев данный код, я просто не мог не выложить его сюда.

    Запостил: bormand, 23 Ноября 2012

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

    • там, вроде как, parseInt есть. Довелось мне на нём пописать...

      Но код ядрён. Насколько я могу судить, он работоспособен )
      Ответить
      • > там, вроде как, parseInt есть
        Есть конечно, и даже работает ;) Но меня спрашивали именно про toInt().

        Кстати этот toInt() возвращает 0 при ошибках, а parseInt() - NaN, видимо ради этого его и пытались запилить.

        P.S. По ссылке это говнище упростили до красивого number | 0, которое тоже работает.
        Ответить
        • Кстати, это ToInt32. См., например, toInt(11111111111111). Бинарные побитовые операторы в js преобразуют аргументы в Int32.
          Ответить
    • Господа, если вы не против, я подначну здесь веточку.
      Господа rat4, Роман Кашицин (простите, если опечатался), как дела с ГК2.0 и его JSON-API, как поживаете, какие планы?
      Ответить
      • > как дела с ГК2.0 и его JSON-API
        Уже полтора месяца занят развёртыванием и допиливанием другого проекта + хардкор на работе, времени очень мало :(
        Исправление косяков требует серьёзного переписывания фронтэнда, в локалке у меня лежит куча набросков, но они пока ещё не завелись. В проекте я всё ещё заинтересован, активная разработка, надеюсь, продолжится в ближайшее время.
        Ответить
        • Спасибо! Беспризорные дети вас не забудут, заграница нам поможет. А пока сдаём кто сколько считает нужным...
          ещё бы двенадцать рублей для круглого счёта.
          Надеемся, и @рат4 отзовётся
          Ответить
        • Помощь не нужна? Только расскажите с какими инструментами приходится работать и как работа организована?
          Ответить
    • + number

      блин, сначала подумал, что жабаскрипт научился частичному применению, но потом дошло, что это просто унарный плюс
      Ответить
      • >блин, сначала подумал, что жабаскрипт научился частичному применению
        Function.prototype.bind
        Ответить
    • Типичный пиздец в стиле динамической типизациии.
      Ответить
      • Динамическая типизация хорошая.

        А вот нестрогая типизация - нехорошая.
        Ответить
        • В чём плюсы динамической типизации? Что тип указывать не надо? Так с этим и статическая автоматическая справляется - тип переменной выводится при объявлении, типы параметров функции определяются при её вызове, все функции шаблонные.
          Ответить
          • Не путай неявную типизацию и динамическую.
            Ответить
            • Так нахера нужна динамическая?
              Ответить
              • Я сам сторонник статической типизации, и считаю, что динамика должна как можно скорее исчезнуть (и всем использующим её желаю гореть в аду, ня!).
                Тем не менее, недавно встретился пример (аналогичный код на разных языках), в котором статика отсосала у динамики: некие вычисления в Erlang'е спокойно продолжались, когда числа постепенно увеличились, и стали BigNum (или как они там зовутся). А в языке со статикой и с выводом типов изначально значения были выведены как int, и в ходе вычислений происходил фэйл (overflow).
                Ответить
                • Ваш пример - говно.
                  Ответить
                • http://ideone.com/InkdAM
                  Статически типизированный язык со строгой типизацией. Ничего не переполнилось. Что я делаю не так?
                  Ответить
                  • bormand только что #

                    > Ничего не переполнилось.
                    Как это не переполнилось? Хочешь сказать, что поле под выхлоп на ideone тоже не переполнилось?

                    UPD: Хаскель вменяет выражению тайпкласса Num тип Integer, если программистом не сказано что-то иное.
                    Ответить
                    • Борманд, эко тебя разлогинило?
                      Ответить
                    • guest Позавчера #
                      bormand только что #
                      Когнитивный диссонанс...
                      Спасибо страйко за цитирование с тегами, а то бы пришлось долбанный BB руками набирать...
                      Ответить
    • Привет, говнокод!
      v=+v;
      return v!==v?0:v!==0&&v!==Infinity&&v!==-Infinity?(v>0||-1)*Math.floor(Math.abs(v)):v;

      http://es5.javascript.ru/x9.html#x9.4
      Ответить

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