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

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    var s = '';
    	s += (hours)  ? ( (hours>9)  ? hours  + ':' : '0' + hours  + ':') : '00:';
    	s += (minute) ? ( (minute>9) ? minute + ':' : '0' + minute + ':') : '00:';
    	s += (second) ? ( (second>9) ? second + '.' : '0' + second + '.') : '00.';

    почему бы не сделать так:
    var s = '';
    s += (hours<10) ? '0' + hours : hours) + ':';
    // и так далее...

    Запостил: rudolff, 05 Августа 2010

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

    • почему бы не сделать ф-цию, которая дополняет строку до заданной длины нулями и юзать ее повсеместно...
      ну или на крайняк функцию
      return (num<10) ? '0' + num: num)
      Ответить
      • Почему бы не использовать встроенное форматирование даты?
        hh:mm:ss или что-то вроде?
        Ответить
        • В стандарте не видел подобной функции:
          http://www.w3schools.com/jsref/jsref_obj_date.asp

          В библиотеках, типа extJs такая возможность есть
          Ответить
          • почитал стандарт и не нашол.
            toLocaleString() и toString() не помогают. getMonth() дает инт от 0 до 11.
            да, моя ошибка.
            Ответить
        • куда встроенное, если не секрет?
          Ответить
      • Вот так было бы идеально
        String.prototype.addNulls = function(num, count)
        {
           num = '' + num;
           for(var i=0, n=count-num.length; i<n; i++ )
              num = '0' + num;
           return num;
        }
        Ответить
        • код идельным быть не может, ИМХО. разве что только самый простой и посему бесполезный.
          for(var i=num.length; i<count; ++i)
          Ответить
          • Согласен, но он должен делать то что должен и с минимальными затратами(главная затрата - это время на его понимание).

            String.prototype.addNulls = function(num, count)
            {
            num = '' + num;
            count = count-num.length;
            while(--count)
            num = '0' + num;
            return num;
            }
            Ответить
            • опять-таки не идеал
              num += '0';
              к тому же код будет выдавать на меньше нулей из-за прединкремента

              короче идеального кода не существует - он может только аромат иметь разный, ну и быть рабочим/нерабочим
              Ответить
            • ну или while(num.length<count) num='0'+num;
              не идеал, но короче
              Ответить
          • но даже приведенная мной оптимизация - не лучший путь:
            ведь можно сразу сгенить строку из нулей
            new Array(count-num.length).join('0');
            см. http://govnokod.ru/3841
            Ответить
            • не догадывался о таком способе, надо взять на вооружение ;)
              Ответить
            • Странно что нет метода для заполнения строки определенным паттерном.
              Ответить
            • можно расширить стандарт необязательным параметром :)

              var txt = new String(string, count);
              Ответить
            • а мне не нравится, что мы выделяем целый массив, да еще в виде обьекта
              Ответить
              • "да еще в виде обьекта"
                - а что, в js бывает по другому? в нем всё объекты...
                Ответить
              • При таком способе, память под строку выделяется один раз при вызове ф-ции join, а не на каждой итерации как в предыдущих вариантах
                Ответить
                • а разве строки в жабаскрипте иммутабельны?
                  Ответить
                  • Да. Ты не можешь поменять отдельный символ в строке как в C.
                    str[3]='X';
                    В js такая конструкция недопустима, если только str не массив или объект
                    Ответить
                    • проверил - и правда. так что действительно строка выделяется заново
                      ну тогда лучше способа чем через массив не могу придумать
                      Ответить
        • тогда уж расширить Number.toString
          Ответить

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