1. C++ / Говнокод #5508

    +165

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    static string GetRequestParam(string request)
            {
                string result="";
                int i = 4;
                for(char c=request[i];c!=' ';c=request[++i])
                    result+=c;
                return result;
            }

    Запостил: Говногость, 03 Февраля 2011

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

    • субстринг с 4ого символа до пробела?
      БСК.
      Ответить
    • string result="";

      вот это моя любимая часть. некоторые компилеры оптимят это - но многие нет. а фишка заключается в том что STL вполне корректно попытается сделать копию пустой строки со всеми вытекающими.

      как то раз на одном проекте, часто используемый класс такую инициализацию в конструкторе использовал. после удаления этих бессмысленых `=""` производительность апликухи улучшилась на более чем 5%.
      Ответить
      • По сравнению с 6-й строчкой это мелочи.
        Ответить
        • ежику понятно что это все говно, но просто с `std::string s = "";` наболело ;)

          не говоря уже о том что тривиальной проверки на конец строки не делается. что для меня - говно №0.
          Ответить
          • Страшно подумать, что написано в более сложных функциях.
            Ответить
        • А разве строка не умеет резервировать место заранее?
          Ответить
          • умеет, но она это делает как делфи, по определенным коеффициентам, что не всегда оптимально...
            хотя мы могли указать что вероятнее всего строка, которую мы ждем, влезет например в 32 символа и избавиться от одной лишней аллокации в большинстве случаев...
            Ответить
            • Тогда алгоритмическая сложность при наращивании по элементу будет та же, что и при моментальном выделении (о(н)).
              А на константу здесь, скорее всего, пофиг.
              Ответить
          • Не обязана. И вообще, все эти телодвижения легко заменить на одну строчку:
            return request.substr(4, request.find(' ', 4));
            Ответить
    • Сглупил... Это код на C#. :( Впрочем, в раздел С++ тоже подходит...
      Ответить
      • Может это
        string result="";
        , дабы
        string result=new string();
        не писать?
        Ответить
        • Вообще, правильным (по MSDN) считается
          string result = string.Empty;
          Ответить
    • C тех пор как я открыл для себя Perl, меня стало воротить от таких конструкций
      "строка1 += строка2". В том смысле, что оператор сложения выполняет конкатенацию.
      Ответить
      • а что, по вашему, должен делать этот оператор со строками?
        Ответить
        • В PHP? Вы не поверите...
          Ответить
        • этот оператор вообще не должен ничего делать со строками, он предназначен для сложения чисел
          Ответить
          • Сложение чисел - это математика. А в математике нет операции +=
            Ответить
            • невелика разница.
              X += Y это сахар для X = X + Y.
              Такая-то операция есть в математике, математик вы наш дорогой?
              Или string1 = string1 + string2 + "blabla" не встречали ни разу?
              Ответить
              • X = X + Y - это должно быть НЕравенство :р
                Ответить
                • Y=0
                  Ответить
                • Поэтому в нормальных языках это пишется как X := X + Y;
                  Ответить
                  • мы знаем, какие для вас "нормальные"
                    Ответить
                  • Интересно. Подобный сахар там бы выглядел как
                    X +:= Y

                    Занятный смайлик.
                    Ответить
                    • 3~~@
                      Ответить
                    • в лазарусе, если поставить соотв. опции,
                      это выглядит в точности как в С/С++:
                      X+=Y;
                      Ответить
                      • > в лазарусе
                        ЛОЛШТО?
                        Ответить
                        • по данной терминологии у Тараса Б проконсультируйтесь...
                          Ответить
                        • лол то
                          := - присвоить как есть (двоеточие отвечает за "как есть"), += - присвоить и сложить со старым. Удобно, логично.
                          Ответить
                          • в паскале такого не сделаешь
                            говно этот ваш лазарус
                            Ответить
                            • Невидимую надпись я то сразу и не приметил...
                              Ответить
                              • чорт, паливо!
                                там целый трикалор:
                                1) оригинал пост - говно, поскольку фича fpc, а не lazarus (который является IDE, имитирующим Delphi)
                                2) инициатива введения shorthand операторов в fpc - засахаренное говно
                                3) lazarus сам по себе говно, т.к. требует установки в рут
                                Ответить
                                • Лазарус глупый, пытается во все щели делфай копировать, и глючный вдобавок.
                                  Для установки компонентов ему потребна пересборка самого себя.
                                  Забавная красноглазая безделушка.
                                  С ен. мовы перевод слова вполне символизирует.
                                  Ответить
                                  • just as planned, хотели открытые дельфи, их и сделали, даже слоупочный интерфейс склонировали. а глючит потому, что молодой еще.
                                    в статической линковке не вижу ничего плохого, даже наоборот, шароварные макаки, работающие методом проб и ошибок должны страдать. броланд решил вопрос высером своего формата шаред объектов, вот говнище так говнище.
                                    еще там проститутская лицензия на библиотеки.
                                    лазарь вроде с прожидью был, нет?
                                    Ответить
          • это может иметь смысл для динамических языков, что бы определить "2"+"2", это "22" или "4"?
            здесь же нет такой неоднозначности
            Ответить
            • >здесь же нет такой неоднозначности
              для компилятора нету.
              для человекообразного писателя/читателя есть.
              Ответить

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