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

    +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
    String.prototype.toCamelCase = function () {
    	var symbols = [], ready = '';
    	for (var z = 0; z < this.length; z++) {
    		symbols[z] = this.charAt(z);
    	} 
    	for (var i = 0; i < symbols.length; i++) {
    		if (symbols[i] == '-') {
    			symbols[i + 1] = symbols[i + 1].toUpperCase();
    		}
    	}
    	for (var q = 0; q < symbols.length; q++) {
    		ready = ready + symbols[q];
    	}
    	ready = ready.replace('-', '');
    	return ready;
    };

    margin-left => marginLeft

    Запостил: eval, 25 Июня 2010

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

    • не особо и говнисто
      Ответить
      • Циклы вместо split, join, replace — не говнисто?
        Ответить
        • просто другой подход. Очевидный для начинающих. но я бы не сказал, что тут очень уж ахтунг. да, без сплита, жойна и реплейса. Ну и что?

          Почему, если код без гуру-выебов - то сразу говно? неоптимизированный но понятный код- говно. код, оптимизированный для быстродействия, но нечитаемый - тоже говно. код, оптимизированный по потреблению памяти - опять же говно.
          то есть неговнокод написать невозможно: какая нить сука да вякнет, что это неТРУЪ
          Ответить
          • показать все, что скрытоВсё верно сказал.
            Ответить
          • Ну почему нельзя?

            Да, и ты забыл упомянуть про оптимизированный и читаемый код.

            String.prototype.toCamelCase = function () {
            	return this.replace(/-(\w)/, function (a, x) {
            		return x.toUpperCase();
            	});
            }


            Где ты тут видишь говнокод?
            Ответить
            • а какая нить кодообезьянка да вякнет, что это у вас за хуйня /-(\w)/, да еще и функция непонятная, и еще какой то прототип? от так то
              Ответить
            • Конечно, говнокод. Глобального модификатора нет, в наличии жрущий память капчеринг.
              String.prototype.toCamelCase = function () {
              	return this.replace(/-[a-zA-Z]/g, function (all) {
              		return all.toUpperCase();
              	});
              }
              Ответить
          • Да, и почему твой пост оправдывает говнокодеров тем, что нормальный код написать якобы невозможно?
            У меня конечно нет шансов тебя переубедить, ведь твоё мнение одобрил сам WebKill, программист погромист всех времён и народов.
            Ответить
            • напишешь нормальный, по-твоему, код, а кому то он все равно не понравится!
              не призываю писать код левой задней конечностью
              Ответить
          • lul, а ргототуре значит очень начинающий и учебный?
            нубокодом задача решается в один проход
            Ответить
    • показать все, что скрытоКакой все таки java-script ужасный язык! неужели кому-то нравится
      String.prototype.toCamelCase = function () {

      ?
      Ответить
      • зато потом удобно "margin-left".toCamelCase()
        ваш К.О.
        Ответить
        • Безусловно.
          Но даже ненавидимые мною экстеншен методы в .NET/CLR и то имеют более приятный синтаксис.

          Меня в JS именно синтаксис вымораживает. Хотя и на нем можно писать, и даже привыкнуть -- сам пробовал
          Ответить
          • а что бы вы предложили для йс?
            Ответить
            • йс?
              Ответить
              • js
                Ответить
                • j как "й", как в "jугославия"?)

                  Я бы советовал или сделать нормаьный синтаксис для ООП или не поддерживать вовсе эту парадигму.

                  Ну согласитесь -- идиотизм, когда приватное свойсто пишется как "var m_strProperty", а публичное как "this.m_strProperty", когда объекты называются "function()" и значение "this" зависит от контекста...

                  Я понимаю что обратная совместимость и все дела, но язык действительно очень некрасивый.
                  Ответить
                  • действительно, написание классов процедура становится очень своеобразной, но...
                    там много всяких "но", ленюсь.

                    о некрасивости: вы еще duck-типизацию не видели.
                    Ответить
                    • Я видел утку в питоне -- вполне себе нормально)
                      В JS тоже типизация утиная -- статической-то типизации в JS нет.

                      Вообще языки без статической типизации это сакс. Если вам нужно написать больше одной страницы кода, то без статической типизации плохо.

                      Даже на горячо любимом мною питоне я бы не стал делать крупные проекты.
                      Ответить
                      • и все таки в JS типизация НЕ утиная

                        иногда как раз динамики не хватает. На той же яве приходится выкручиваться средствами рефлексии и динамической компиляции. Хвала, есть груви

                        На питоне кстати немало успешных крупных проектов
                        Ответить
                        • >>и все таки в JS типизация НЕ утиная

                          Потому что интерфейсов нет?

                          >>На той же яве приходится выкручиваться средствами рефлексии

                          Это, скорее всего, говорит не об очень хорошем дизайне.
                          Даже кастинг это плохо (со времен генериков) что уж говорить о рефлексии.

                          >>На питоне кстати немало успешных крупных проектов

                          Не спорю, один portage чего стоит) Из скриптовых языков питон наверное самый лучший с самой внятной идеологией.

                          Но я бы не осилил на нем крупный проект, наверное
                          Ответить
                          • > Из скриптовых языков питон наверное самый лучший с самой внятной идеологией.

                            Ага, "Дзэн Питона". Нехватка идеологии - частая причина сфейленных языков...
                            Ответить
                            • >>Нехватка идеологии - частая причина сфейленных языков...
                              Это ирония? Посмотрите на PHP, в котором столько подходов к написанию программ -- сколько школьников приложилось к его использованию. В любом проекте есть восемь разных код-стайлов, немного ООП подхода, немного процедурного, и шесть велосипедов)
                              Ответить
                          • >>и все таки в JS типизация НЕ утиная
                            >Потому что интерфейсов нет?
                            нет, не поэтому. А потому, что (почитайте про утиную типизацию) из того, что классы одинаково определены, они еще не равны
                            function A() {this.p=1;}
                            function B() {this.p=1;}
                            a=new A();b=new B();
                            a.prototype.q=1;
                            alert(b.prototype.q);//"undefined"

                            при утиной типизации мы бы получили тоже 1
                            Ответить
                            • Я полагал что утиная типизация просто отключает требование явно указывать представляемый интерфейс.

                              Представить интерфейс значит просто реализовать все методы, без указания "implements" (или ":").

                              Разве на сравнение это влияет?
                              Ответить
                          • >Это, скорее всего, говорит не об очень хорошем дизайне.
                            вряд ли. Допустим, у коллеги была такая задача:
                            есть шаблон, абсолютно непредсказуемой формы (скажем, ртф), его нужно заполнить из пришедшего бина (поля могут соответствовать или нет), и выдать заполненный документ (дополнительно что бы был в пдф). Реализовать на яве.
                            здесь, поскольку свойства бина могут быть любыми, алгоритм должен в конечном итоге использовать рефлексию.
                            При использовании динамического языка (тот же груви или житон) задача упрощается в разы
                            Ответить
                            • Тоесть о существовании кого-то поля Вы узнаете только по его наличию у бина?

                              В таком случае (боже, что я говорю!) там должен быть Map а не свойства бина) Это лучше, чем рефлексия.
                              Ответить
                              • конечно бы лучше, но есть как есть, бин приходил извне.
                                Ответить
                          • >Из скриптовых языков питон наверное самый лучший с самой внятной идеологией
                            наверное. Но синтаксис, в частности, использование табов в качестве оформителей блоков, меня отвернул от него раз и навсегда еще на этапе изучения
                            Ответить
                            • Ну Вы ведь identы все равно в программах делаете.
                              Так вот питон заставляет Вас их делать)
                              Ответить
                              • Не, хумор в том, что часто редакторы ломают отступы (напр. табы не делает пробелами). Т.е. чтобы начать писать на питоне, нужно сначала откалибровать редактор. А это как-то идёт в разрез с идеологией "сел и сходу начал писать".
                                Ответить
                                • 1) есть специальные редакторы для питона. Pycharm от JetBrains например.
                                  2) >>сел и сходу начал писать"
                                  Дада, F4 в фаре -- и вперед. На PHP так часто пишут
                                  Ответить
                                  • >> сел и сходу начал писать"
                                    >> Дада, F4 в фаре -- и вперед. На PHP так часто пишут

                                    А что такого - весь пойнт питона в этом - сел и начал сходу писать. Во всей идеологии и структуре это прослеживается (утиная типизация, "динамические" объекты, минимум ключевых слови т.д.) На продумывание и возню с редакторами/синтаксисом/мэйкфайлами всякие с++ придуманы...
                                    Ответить
                                    • надо ОДИН раз настроить IDE и дальше быстро писать))
                                      Поглядите на пайшарм, серьезно
                                      Ответить
                                      • Ну я не спорю, что проблема в принципе надуманная) Она наверное была актуальна, когда питон только появился, и специализированных редакторов под него не было.
                                        В принципЕ, есть что-то схожее с явой -- она была сначала интерпретируемая и очень тормозная (особенно на машинах того времени), а сейчас скорость приближается к с++, но от статуса тормозной до сих пор никак не отмоется..
                                        Ответить
                                        • >>есть что-то схожее с явой -- она была сначала интерпретируемая
                                          щито?
                                          Ответить
                                          • > щито?

                                            А вы не знали? о_О До появления HotSpot'а не было джиттинга в натив, ява интерпретировалось байткодину за байткодиной. Прбиавьте сюда процессоры времён середины 90-ых - много fun'а

                                            (пока грузится апплет явы, можно действительно заварить пару чашек кофе ))
                                            Ответить
                                            • >>интерпретировалось байткодину
                                              Я бы не стал называть этот процесс "интерпретацией".
                                              Схема всегда была одна: код - > opcodes -> jvm.
                                              Просто потом добавили JIT для скорости.

                                              Но может быть я не владею терминологией, конечно
                                              Ответить
                                              • Вроде байткод интерпретируется.. А как ещё сказать?

                                                http://en.wikipedia.org/wiki/Interpreter_%28computing%29
                                                Ответить
                                                • >http://en.wikipedia.org/

                                                  И после этого ты не википедик??
                                                  Ответить
                                              • > Схема всегда была одна: код - > opcodes -> jvm.

                                                Это ничего не говорящая схема, вопрос в том, как называть переходы от одного элемента к другому.

                                                java-код -> opcodes -- это компиляция

                                                opcodes -> jvm это интерпретация

                                                В моно сначала тоже не было джиттера, и штука, которая запускала эксешник, называлась mint = mono interpreter.

                                                Хм.
                                                Ответить
                                                • Можно сказать что микрокод моего процессора итерпретирует инструкции?

                                                  В таком случае запуск .com файла тоже интерпретация)
                                                  Ответить
                                                  • > Можно сказать что микрокод моего процессора итерпретирует инструкции?

                                                    Так и есть, цПУ это интерпретатор машинных команд... Просто слово "интерпретация" имеет широкое и узкое значения... Узкое значение проявляется в противопставлении "машинный код" ("компилируенмый" язык) vs "байткод" ("интерпретируемый язык/VM"). А широкое значение когда вообще любой код интерпретируется цпу, в том числе машинный x86...

                                                    Я так понимаю...

                                                    > В таком случае запуск .com файла тоже интерпретация)

                                                    на >WinXP это в любых смыслах явная интерпретация)
                                                    Ответить
                                                    • 1) В таком случае интерпретация синоним "выполнение", верно?

                                                      2)причем тут xp?
                                                      какая разница -- работает процессов режиме real или "virtual 8086"?
                                                      Ответить
                                                      • > 1) В таком случае интерпретация синоним "выполнение", верно?

                                                        В моём посте это значило "Отсутствие джиттинга", конец)

                                                        > причем тут xp?

                                                        ну так .com'ы во всех виндах после ХР эмулируются (т.е. интерпретируются) внутренней подсистемой недовиртуализации, винда хрен тебе даст прямиком в real лезть. Там инструкции именно что интерпретируются.

                                                        Или я ошибаюсь на этот счёт?
                                                        Ответить
                                                        • показать все, что скрытоОк, судя по вики, там смешанное выполнение...
                                                          Ответить
                                                        • аа! бегом сюда: http://www.intel.com/products/processor/manuals/
                                                          читать Basic Architecture и System Programming Guide.

                                                          У проца есть режимы работы: real, protected, V86 (виртуальный 8080), еще всякие SMI и 32e, но это к делу не относится.

                                                          Винда при загрузке переключает процессор в protected (это делает чуть ли не NTLDR).

                                                          Обратно в реал его не вернуть -- тока перезагрузкой, да и не надо это.

                                                          Что бы выполнять 16ти разрядный код нужно переключить процессор в режим V86, который для программы выглядит как реал (с некоторыми ограничениями на IN/OUT и другие инструкции, так же ошибки приводят к исключениям (понятие защиненного режима)).

                                                          Для этого винда запускает ntvdm.exe, про которого можно почитать у Руссиновича
                                                          Ответить
                                                          • меня ввело в заблуждение слово "эмуляция", я особо не читал, как работает ntvdm. про режимы я смутно знаю) получается, это не "эмуляция" вовсе там. наврали мне)
                                                            Ответить
                                                        • >ну так .com'ы во всех виндах после ХР эмулируются (т.е. интерпретируются)
                                                          Они и в хп под виртуальной машиной выполняются.
                                                          Ответить
                                                        • >Там инструкции именно что интерпретируются.

                                                          Инструкции в WinXP выполняются в V86 режиме процессора. Обращение к портам ввода вывода генерят прерывание ошибки недостаточного уровня IOPL для обращения к порту, в котором обработчик решает, как данное обращение к порту переслать реальному виндовому драйверу устройства.
                                                          Ответить
                                                      • Просто как бы если так подумать, то интерпретация в узком значении, это когда присутствует дополнительный говнослой исполнения с разными уровнями привилегей. Не знаю, как внутренне реализовано в x86-процессорах, но если protected mode-процессор сверху вниз глядит за vm86-cопоцессором (?) плюс за этим следит protected-доп. код, то это тогджа интерпретация в узком значении) а в широком - любая программа интерпретация....
                                                        Ответить
                                                        • >>глядит за vm86-cопоцессором
                                                          :)))))
                                                          "Алиса, никогда не используй слова за то, что они длинные и красивые" (c)

                                                          Сопроцессор занимался плавающей точкой, и встроен в процессор со времен 486х.

                                                          Никакого специально "VM86 сопроцессора" не существует -- это тот же проц, просто переключенный в другой режим работы.
                                                          Ответить
                                                    • >Просто слово "интерпретация" имеет широкое и узкое значения...

                                                      Википидорить научился?
                                                      Ответить
                                                      • > Википидорить научился?

                                                        Сам додумался, прикинь?
                                                        Ответить
                                                        • >Webkill:
                                                          Вроде байткод интерпретируется.. А как ещё сказать?
                                                          http://en.wikipedia.org/wiki/Interpreter_%28computing%29

                                                          Прикинул.
                                                          Ответить
                                                    • >"машинный код" ("компилируенмый" язык)
                                                      Лять. Ну это вообще пиздец загнул.
                                                      Ответить
                                                • >java-код -> opcodes -- это компиляция

                                                  Долбоёб. Это трансляция.
                                                  Ответить
                                                  • >java-код -> opcodes -- это компиляция
                                                    > Долбоёб. Это трансляция.

                                                    Компиляция и есть трансляция.

                                                    "Это яблоко." -- "Долбоёб, это фрукт!"
                                                    Ответить
                                        • показать все, что скрытоНикуда она не приближается. С++ хоть и говно(PHP лучше), но пока никем не обогнан.
                                          Ответить
                                  • показать все, что скрыто>F4 в фаре
                                    Устарет ты чувак.
                                    Ответить
                                    • Я юзал EditPlus -- отличная штука: открывает файлы огромных размеров, делает суперский поиск по регулярке, умеет менять в десяти открытых файлах итд...

                                      Потом мне запретили юзать ворованный софт, я пожалел $20, и стал искать алтернативу. Пробовал notepad++, еще всякое -- все не то. В итоге поставил себе gvim, и понял что я дома)))
                                      Все таки VI это прекрасно
                                      Ответить
                              • иденты делаю, но такие, какие захочу в соотв. с собственными code conventions. Табы же не перевариваю вообще. Да и скобки легче посчитать, чем табы (придется включить подсветку невидимых символов)
                                Ответить
                                • >> Табы же не перевариваю вообще.
                                  о, ужас! Вы из тех, кто вместо табов любит делать 4 пробела?

                                  Табы лучше потому, что Вася может настроить редактор на ширину табов в 8 пробелов, а Маша -- на ширину табов в 2 пробела. В зависмости от их вкусов/мониторов/разрешения и зрения. Именно этим табы в тысячу раз лучше пробелов.

                                  >>Да и скобки легче посчитать
                                  В хорошей программе ничего считать не надо -- все и так видно. Если у Вас восемь уровней вложенности, или IF и ELSE разделяют 70 строк кода, или у Вас функция на 4 экрана -- Вам срочно нужно делать рефакторинг!

                                  Если Вы видите "}" и не понимаете -- откуда она -- у Вас некрасивый код)
                                  Ответить
                                  • О ужас! Вы из тех, кто юзает табы вместо 4 пробелов?

                                    > Табы лучше потому, что Вася может настроить редактор на ширину табов в 8 пробелов, а Маша -- на ширину табов в 2 пробела. В зависмости от их вкусов/мониторов/разрешения и зрения.

                                    Ага, и если исходник изначально отформатирован определённым образом, то у Маши он может отображаться вкривь и вкось.

                                    Напр. если взять сишное:

                                    func_call(i,                   /* Этот аргумент делает то-то */
                                              j,                   /* Этот аргумент делает это */
                                    )


                                    у Пети отобразится нормально, а у Маши с её настроенными табами может всё поехать.

                                    Именно этим пробелы в тысячу раз лучше табов (по крайней мере для си).
                                    Ответить
                                    • Может, Вы еще и скобку на новой строке пишите?!
                                      Ответить
                                      • > Может, Вы еще и скобку на новой строке пишите?!

                                        Да, намного легче визуально воспринимтаь, где начинается блок, а где кончается -- в отличие от каши в явовском гайдлайне.
                                        Ответить
                                        • ))))
                                          на самом деле это вопрос код-стайла.

                                          Я пишу на новой везде, кроме джавы (там так принято)
                                          Ответить
                                          • > Я пишу на новой везде, кроме джавы (там так принято)

                                            Ну коненчо, в чужий монастырь со своим уставом не лезут.

                                            Однако реально скобка с новой строки выделяется среди прочего кода --и легче воспринимать что где (по крайней мере, мне -- неужели кто-то считает иначе?)

                                            p.s. И рефакторить намного легче -- выделил весб блок и удалил/перенёс/закомментировал, а в яве нужно бороться вручную..
                                            Ответить
                                            • На самом деле у явы есть свой код-стайл и это очень хорошо, потому что любой нормальный код на яве -- легко читаем.

                                              Рефакторить нужно в нормальном IDE. Например в idea есть хоткеи для выделения блока по первой скобке, и хоткей для комментария и вынеса в функцию)
                                              Ответить
                                              • Сам придумал проблему - сам решил.

                                                Не нужно прсто изначально придумывать себе проблемы ) Не спорю, что костылей напридумано несчетное количество наверное..
                                                Ответить
                                    • Вы правда так делаете?:)
                                      А я всегда делаю так (и для сей тоже)

                                      /*
                                       * @param bar number of eggs in bucket
                                       */
                                      void foo(int bar)
                                      Ответить
                                      • > А я всегда делаю так (и для сей тоже)

                                        Это в определении функции.
                                        Мой пример - по вызову. В си такое на каждом шагу (и вообще подобное форматирование). Например, взять CreateProcess. У неё дофига параметров - и правильный код должен каждый параметр прокомментировать. С табами всё превращается в кучу.
                                        Ответить
                                        • Так можно же переменные правильно называть, нет?
                                          Ответить
                                          • > Так можно же переменные правильно называть, нет?

                                            Вот напр. пример на MSDN:

                                            if( !CreateProcess( NULL,   // No module name (use command line)
                                                    argv[1],        // Command line
                                                    NULL,           // Process handle not inheritable
                                                    NULL,           // Thread handle not inheritable
                                                    FALSE,          // Set handle inheritance to FALSE
                                                    0,              // No creation flags
                                                    NULL,           // Use parent's environment block
                                                    NULL,           // Use parent's starting directory 
                                                    &si,            // Pointer to STARTUPINFO structure
                                                    &pi )           // Pointer to PROCESS_INFORMATION structure
                                                )


                                            Как с "правильно названными параметрами" определить, что NULL в седьмой аргументе говорит о том, что субпроцесс наследует список переменных окружения, а NULL в первом - что нужно игнорировать первый аргумент и использовать второй?
                                            Ответить
                                  • >о, ужас! Вы из тех, кто вместо табов любит делать 4 пробела?
                                    2, 4 это слишком много
                                    Ответить
                                    • Дайте угадаю - вы в подроствковом возрасте любили дельфи?

                                      Два - слишком мало. В моих косых глазах код начинает путаться.

                                      Для хелловорлда можно и 2, но если имеется комманда, то нужно учитывать всех - т.е. юзать стандартное 4. Это не так много. В ядре линукса юзается 8 -- и даже оно не смотрится ужасно.
                                      Ответить
                                      • В децтве я писал на борланд-паскале:)

                                        Хоть 2 хоть 16 -- табы можно настраивать, как угодно)
                                        Ответить
                                      • нет, дельфи я никогда не любил. вот Жаба - это, каюсь, моя любовь ))))
                                        так что 2
                                        Ответить
                                        • > вот Жаба - это, каюсь, моя любовь ))))
                                          > так что 2

                                          В жабе принято иметь по два пробела?
                                          Ответить
                                  • В соответствии с правилом №30 у Маши не может быть 2 пробелов
                                    Ответить
    • показать все, что скрытоА вы знали, что я скоро порабощу веб и убью. Затем отдамся на вашу милость!!! Акуратней обращайтесь с моим телом!!!
      Ответить

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