ЙажаСценарий / Говнокод #20011 Ссылка на оригинал

0

  1. 1
  2. 2
while (st.indexOf(" ") != -1)
        st = st.replace(" ", " ");

Запостил: FrontlineReporter FrontlineReporter, (Updated )

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

  • Эм... Пробел меняется на пробел и это когда-то заканчивается?.. Пойду выпью яду...
    Ответить
    • в юникоде пробел пробелу рознь. может где чего убилось про копе-пасте этого кода потому что там на самом деле три одинаковых пробела.

      но я не раз писал подобный код для чистки е-буков: замена nbsp (0xA0) на обычный пробел (0x20). но на самом деле там все еще хуже: https://www.cs.tut.fi/~jkorpela/chars/spaces.html
      Ответить
        • если два пробела то еще смешнее

          предлагаю запилить модуль для нода: 2SpacesToOneSpace
          Ответить
  • Кстати, а как эту задачу решают в обычной ситуации? Может, где-то есть небольшой модуль replaceall для Node?
    Регулярки с g - интересно, но (1) их надо учить ради этого и (2) как быть с произвольными строками?
    Ответить
    • Лучше использовать регулярные выражения с модификатором g ("глобальный").
      Допустим, мы хотим убрать все пробелы в строке тремя различными способами, можно сравнить их быстродействие:
      st=st2=st3=document.body.innerHTML
      //вариант выше
      console.time('test1');
      while(st.indexOf(" ")!=-1) st=st.replace(" ","");
      console.timeEnd('test1');
      //split + join
      console.time('test2');
      st2=st2.split(' ').join('');
      console.timeEnd('test2');
      //используем регулярные выражения
      console.time('test3');
      st3=st3.replace(/ /g,'');
      console.timeEnd('test3');
      Ответить
      • А если всякие []{}() в строке, экранировать придётся. С пользовательским вводом регулярки просто так не используешь.
        Либо быстро и для конкретных строк, либо медленно. Нехорошо это.
        Ответить
        • > С пользовательским вводом регулярки просто так не используешь.

          мне казалось что они PCRE? или нет? в PCRE можно \Q & \E пользоваться - в пользовательском вводе надо только `\` эскэйпить.
          Ответить
          • Было бы ближе к хорошему.
            Но я такого в JS не видел, в популярных реализациях тоже не наблюдается.
            Ответить
    • В ноде только есть модуль IsNumber
      полезных модулей та мнет
      Ответить
        • >>http-code-parser mewejo
          >>Parser for HTTP status codes, turning them into something more useable.
          какие-то распятые мальчики же
          Ответить
      • Стоит отметить, что в жс IsNumber вполне полезен.
        Ответить
        • да, именно так

          JS настолько хуевый язык, что в нем реально нужен IsNumber
          Ответить
    • >/./g - неинтересно
      А как же любимый фсеми функцианальный подход:? foreach по строке как-никак.
      Или как это в терминах хацкиля: map filter fold
      с ecma6 питушнёй => даже писать немного.
      Ответить
    • Я б вообще в js не добавлял, а выпиливал функционал. with и for~in, switch сразу нахуй. Прототипы наверное тоже. Классы однозначно нахуй.

      Можно было б даже пойти на радикальные меры и выпилить классическую императивную часть if/for/while, заменив функциями IF(condition() , then(), else()), WHILE (cond,body)
      Тогда сахарок => обоснован.

      WITH(very.very.long_term,(_)=>
         _.foo=bar;
      )
      Ответить
      • > А как же любимый фсеми функцианальный подход
        Решение! Только хотелось бы чего-то стандартного, оптимизированного какими-нибудь экмацарями.

        > Прототипы наверное тоже
        Полезная штука, только для Object сделать методы has, hasnot, get, set, чтоб операции над объектами работали для хэшей. Ну и функцию наследования полей добавить. Если не фичами и сахарком, то хоть функциями у Object это осуществить. Ещё хорошо бы иметь Object.proto(obj) и Object.this(obj), которые возвращают прототип и сам объект без прототипа соответственно.

        > (_)=>
        Эти скобки даже опустить можно было. Любопытное решение получается.
        Правда, для функции с несколькими выражениями придётся {} добавить, в конце будет знаменитое });

        Вообще, что на жс ни пиши, в конце всегда к }); приходишь.
        Ответить
        • >Полезная штука
          Её использование навязывает убогие т.н. js-классы => ООП.
          Язык и без этого очень функциональный и тьюринг полный.

          >Ну и функцию наследования полей добавить.
          Меня уже тошнит при слове "наследование". Реально ведь херовый способ повторного использования.
          И чего все всё норовят в js жабу притащить.

          Плюс эти блядские вечно торчащие поля valueOf и toString. Не раздражают, не?

          JSON.stringify(obj) нормально ведь работает. Без всяких прототипов. Но нет, блядь хочу методы через точку вызывать.
          Ответить
          • > Меня уже тошнит при слове "наследование".

            А расскажите-ка про хорошие способы повторного использования.
            Ответить
            • >А расскажите-ка про хорошие способы повторного использования.
              Анонимные поля в go, трейты/миксины.
              Ответить
            • тащемто красивое делегирование вполне себе замена

              наследовать хорошо интерфейсы (или протоколы или абстрактные классы)

              А когда у тебя 5 уровней наследования то ОЧЕНЬ СЛОЖНО сделать ВНЯТНЫЙ интерфейс и понять что где кого переопределило, особенно когда у тебя жаба и все оверрайдится по умолчанию

              А уж если у тебя есть виртуальные и невиртуальные методы (разные языки со словом Си) то еще круче
              Ответить
              • Замена чему? наследованию?

                Есть класс Man у которого есть метод go есть класс Woman которому нужно сделать метод goBarbershop
                Давай делегируй
                Ответить
                • Ради бога. Интерфейс HumanWithLegs с методом go(), у него реализация SimpleHuman с методом go(), внутри Man и внутри Woman есть инстанс этого HumanWithLegs.

                  Оба наследуют интерфейс HumanWithLegs и передают туда вызовы.

                  Гугли "замена делегирования наследованием".
                  Ответить
                  • Есть ли смысл заменять иерархическую структуру полноценным АОП? То есть писать шото типа
                    entity Abstract
                    а потом сверху обмазывать декораторами с готовой реализацией
                    Ответить
                      • О чём и речь. Существуют ли в принципе языки/фреймворки исключительно на миксинах?
                        Ответить
                  • Потому что легко заменяется кодогенерацией. Да и вообще копировать код гораздо проще, чем писать универсальный. Даже сопровождение копипасты не такое трудное, как сопровождение кода использующего наследование. Го - наглядное тому доказательство.

                    Пару недель назад меня озадачили приделыванием gometalinter к нашему проекту. В его состав входит линтер который ищет явно скопипащеный код. Я запустил и заплакал. Потом подумал, и решил ему скормить несколько относительно больших сторонних проектов, и тут я понял, что жопа она универсальная. Хваленое отсутствие наследования в Го не оставит копипастеров без работы. Я даже удалил парочку интерфейсов, и заменил их копипастой: всего-то нужно было скопировать раза три или пять - подумаешь, мелочи.
                    Ответить
                    • > линтер который ищет явно скопипащеный код
                      И ругается на остальной?
                      Ответить
                      • Нет, он ищет куски в которых код почти повторяется. Ну там одo-два словах разных на десяток строк. Любой код на Го состоит из такого говна примерно наполовину.
                        Ответить
                        • > состоит из такого говна примерно наполовину
                          А линтер ругается на оставшийся код, чтобы не выябывались, а копипастили, как нормальные люди.
                          Ответить
                          • Линтер, который ругается на любой кусок кода, которого нет на SO.
                            Ответить
                    • >всего-то нужно было скопировать раза три или пять - подумаешь, мелочи

                      Одинаковые куски кода выносятся в функцию, везде торчит ссылка и вуаля!
                      Ответить
                    • [quote]
                      Да и вообще копировать код гораздо проще, чем писать универсальный. Даже сопровождение копипасты не такое трудное, как сопровождение кода использующего наследование
                      [/quote]

                      Сивокобыл конечо запредельный питух, просто шоколадные треды говнокода
                      Ответить
                  • Не нужно в большинстве случаев
                    Ответить
      • Заменяем все виды скобок на круглые. И получаем lispговно
        Ответить
        • Не получим. Но приблизимся 🙂
          Тела функций ведь не инфиксные.
          Ответить
  • http://acm.timus.ru/problem.aspx?num=1324&locale=ru

    Если и вам мешают пробелы, попробуйте найти свой способ самой быстрой замены. Предположим, что в тексте есть подстроки длиной не более чем в L пробелов (могут встречаться строки пробелов любой длины от 1 до L). Ваша задача — определить минимальное количество замен, исправляющих группы подряд идущих пробелов на один, и составить план проведения таких замен. Если таких планов несколько, то вы должны выбрать среди них оптимальный — такой, который позволяет заменить любую последовательность пробелов длины не более K (K ≥ L) для максимально возможного K. Если есть несколько оптимальных планов замены, можете вывести любой из них.
    Ответить
  • То-ли дело "Python"...
    >>> string = 'hui hui hui'
    >>> string.replace(' ', '')
    'huihuihui'
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8