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

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    function create (char, repeat) {
    var string = '';
    while (repeat--) string += char;
    return string;
    }

    Заполняем строку одинаковыми символами

    Запостил: eval, 01 Августа 2010

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

    • Не такой уж и говнокод если чесно. Плохо то, что потенциально зарезервированые слова используются в качестве названия переменных, но видя как в яваскрипте не было изменений уже лет 10, то на такие мелочи можно и забить. Единственная альтернатива, которая приходит в голову:

      function create(letter, size)
      {
      	return new Array(++size).toString().replace(/,/g, letter);
      }


      Я не могу придумать другой более простой способ получить строку из повторяющихся символов.
      Ответить
      • Эээ...
        return new Array(++size).join(letter);
        ?
        Ответить
        • Ха, действительно, чет я не подумал. :)
          Ответить
        • Но с другой стороны, создание массива, особенно, если это короткие строки будет непродуктивно. Просто запись короче, а так, шило на мыло.
          Ответить
          • >>>Не такой уж и говнокод если чесно
            +1, но так чутка быстрей,
            var string = char;
            while (--repeat) string += char;

            правда, в этом случае надо поставить проверку на repeat>0 или не передавать такого
            ну еще можно попробовать рекурсивно написать - может оказатся короче по коду и быстрее для длинных строк ))
            Ответить
      • ORLY? А как же все эти ненужные эдишны которые зачем-то пишут в ECMA?
        RegExp для сборки строки использовать зачётно, кстати
        Ответить
        • ненужные - ключевое слово. Вы сами себе на вопрос и ответили. Только это ECMAScript только касается, остальные стандарты экма по-разному...
          Ответить
    • оффтоп - люблю перл ^_^ , там это будет выглядеть так:
      sub create { 
         my ($char, $repeat) = @_;
         return $char x $repeat; 
      }

      или просто
      sub create { 
            $_[0] x $_[1]; 
      }
      Ответить
      • а вот я люблю асм ^_^ и там это будет выглядеть так:
        mov ecx, [repeat]
        mov al, [char]
        rep stos byte [es:edi]

        или просто,
        rep stos byte [es:edi]

        если эти вещи уже в регистрах - что весьма частая ситуация
        Ответить
        • а cld уже не надо? :)
          Ответить
          • блин, спалил меня. ))
            само собой флаги надо выставить, но об этом знают немногие любители перла, пхп, и жабаскрипта...
            Ответить
            • + в реальном коде я б копировал не по байту, а по 4 или 8 - в зависимости от режима (32/64), да еще и aligned...
              но оно даже так быстрее жаб, похапе и прочего
              Ответить
    • а я люблю пыху

      str_repeat('а',10); нет ничего проще
      Ответить
      • Тоже самое есть во многих языках. Даже трудно сказать его его нет
        Ответить
    • как я люблю брейнфак!
      ,>,[-<.>]
      Ответить

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