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

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    var currentTime = (new Date()).getTime();
                var diff = currentTime - this.startTime;
    
                var min = Math.floor(Math.floor(diff/1000)/60);
                if (min < 10)
                    min = "0"+min;
                var sec = Math.floor(diff/1000)%60;
                if (sec < 10)
                    sec = "0"+sec; 
    
                this.timeLabel.setString("TIME " + min + ":" + sec);

    Классика практически, моего творения. Как это можно сделать по-человечески на JS? Всякие jQuary не катят, ибо js встраиваемый.

    Запостил: krypt, 12 Марта 2013

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

    • Как минимум,
      var time = new Date(diff),
          min = time.getMinutes(),
          sec = time.getSeconds()

      А вот формата стандартного в спеке нет, приходится велосипедить.
      Ответить
    • За 15 мин со скуки такой говноформат накидал:
      Date.prototype.format=function(str){
        function lz(num){
          return num<10?'0'+num:num}
        var that=this;
        return String(str).replace(/\{([^{]+)\}/g,function(m,val){
          switch(val){
            case'ms'   :return that.getMilliseconds();
            case's'    :return that.getSeconds();
            case'ss'   :return lz(that.getSeconds());
            case'm'    :return that.getMinutes();
            case'mm'   :return lz(that.getMinutes());
            case'h'    :return that.getHours()%12||12
            case'hh'   :return lz((that.getHours()%12||12));
            case'H'    :return that.getHours();
            case'HH'   :return lz(that.getHours());
            case'd'    :return that.getDate();
            case'dd'   :return lz(that.getDate());
            case'w'    :return that.getDay();
            case'M'    :return that.getMonth()+1;
            case'MM'   :return lz((that.getMonth()+1));
            case'yy'   :return lz((that.getFullYear()%100));
            case'yyyy' :return that.getFullYear();
            }
          return m})}

      Использовать:
      new Date().format('{HH}:{mm}:{ss} {dd}.{MM}.{yyyy}') //=>"15:50:08 12.03.2013"

      Как добавить локализованные названия дней недели, месяцев и прочее - разберетесь сами:)
      Ответить
      • var that=this;

        Убило.
        Ответить
        • А что тут смешного?
          Ответить
        • Это яваскрипт, детка, привыкай - за подобные извращения я его и люблю:)
          Ответить
          • call и apply уже отменили, видимо? Если отменили - то да, надо за собой таскать хвост из that и прочего, всенепременно.
            Ответить
            • Я смотрю, вы любитель говнеца?) Оверхед за счет вызова функции через обертку, лишние пара десятков символов - так держать, вы на верном пути;)
              Ответить
              • > лишние пара десятков символов
                Сравним "var that=this;" и ".call(this, " - это какие-то неправильные лишние десятки.

                > Оверхед за счет вызова функции через обертку
                А вот это меня самого заинтересовало. Если вот это (http://jsfiddle.net/vvHH5/) выполнять в файрбаге - второй вариант быстрее; если в jsfiddle - второй медленнее, причём разбежка примерно на равные проценты. Занятно.
                Ответить
                • Парень, ты - ЛОЛ:) Рассмешил:) Помотри что твой метод в результате возвращает:) Пытаться запустить String.prototype.replace в контексте даты - это что то, величайшее творение гонокода. ВСЕГДА будет возвращаться new Date().toString() :) Скопировал на память.
                  Ответить
        • Это javascript pattern ), все ок.
          JS уникально убогий на сахарок язык. Всегда удивлялась людям которые на нем что то оопшное делают. Это действие напоминает музицирование на тазике вместо барабана - при должном искусстве конечно можно...
          Ответить
          • >JS уникально убогий на сахарок язык.
            За это его я любят!
            >которые на нем что то оопшное делают
            Осторожней, сейчас придет @wvxvw и пояснит тебе что в js просто кривое ооп.
            Ответить
            • Кстати, я его любят не за минимум сахара, а, в том числе, за то, что почти любой сахар тут легко реализовать самому.
              Ответить
              • > почти любой сахар тут легко реализовать самому
                Только в рамках функций высшего порядка и динамической типизации.
                Более упоротая функциональщина и приличная макросистема предлагают гораздо больше в плане "любой сахар"
                Ответить
                • Та да, я и не говорю, что он в этом плане самый лучший. Но вот что из мэйнстрима с ним в здесь сравнится?
                  Ответить
                  • Я бы не сказал, что JS более выразителен, чем, к примеру, Ruby или Python.
                    Ответить
                    • Выразительность и гибкость - разные вещи. Да, выразительность у js никакая.
                      Ответить
                      • Гибкость есть средство достижения выразительности. Для чего нужен "сахар", как не для более краткого и явного выражения сути происходящего?
                        Ответить
                        • В том числе и это. Если с кофе хорошо поиграться, используя гибкость js - он становится куда более выразительным, чем те же руби и питон. Но сам по себе js слишком многословен.
                          Ответить
                          • Руби и питон имеют ровно ту же гибкость если посмотреть в сторону динамики. И можно играться в куда больших границах. А можно не играться а работать прямо сразу.
                            Ответить
                            • По поводу первого - может из-за религиозных предрассудков, но несогласен. Ну а последнее - бесспорно.
                              Ответить
              • <<почти любой сахар тут легко реализовать самому
                +100500 велосипедов?
                Ответить
                • Именно;) Карма велогонщика.
                  Ответить
                • > +100500 велосипедов жуквери-плугинов
                  fixed
                  Ответить
                • >>почти любой сахар тут легко реализовать самому
                  То же можно сказать и о крестах/сишке с их препроцессором. И не потому что он хороший (говно на самом деле), а потому что самый распространенный случай: вот в хацкиле/etс есть фича, эх если б и нам в кресты такое?
                  Да не вопрос! Покрошим немного крестоблядства, добавим крестошаблоны и завернем всё в макрос.
                  Вуаля! Уёбищно конечно получилось, но хацкил не нужен.
                  В конечном итоге оно попадает на этот сайт: "Посоны, смотрите что я высрал"
                  В целом же любой динамический/макросный язык хорошо расширяем.
                  Ответить
                  • Ковыряю я сейчас Cocos2d-x html5. Так вот. Там из js С++ сделали. Даже #include присобачили.
                    Ответить
                    • Человеческий мозг щедр на нелепые и безумные конструкции.
                      Полагаю одними replacами текста функции можно многого добиться.

                      PS Недавно было говно, где к башу ооп прикручивали.
                      Ответить
                      • Типичный представитель биндинга:
                        http://pastebin.com/xnERdbj4
                        У всех функций нативная реализация.
                        Ответить
            • У wvxvw найдется и ни один аргумент в пользу ООП в ж. скрипте. Например: http://pastebin.com/LqXFQ2cE
              Ответить
              • Прямой порт с лиспа? ;)
                Ответить
                • Нет, но у меня есть почти полный порт format для eLispa :)
                  http://code.google.com/p/formatting-el/source/browse/trunk/formatting.el
                  Ответить
              • Даже не удивиляет как-то.
                Я сам подобное пробовал писать из этмологического интереса: "Несет ли фп какой-то профит?".
                А однажды даже видел динамическое частичное применение в жабе с вызовом через рефлексию.

                Так а причем тут ооп? Чистая функциональщина, вполне нормально для js.
                Ответить
      • Никогда бы не подумал, что буду нести код С говнокода. Ну спасибо, типа. Если понадобится ещё один подобный треш с таймером - пригодится.
        Ответить

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