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

    +56

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    bool XIsEmptyString( LPCTSTR str )
    {
    	CString s(str);
    	s.TrimLeft();
    	s.TrimRight();
    
    	return ( s.IsEmpty() || s == _T("") );
    }

    Кажется разработчика настиг приступ паранойи.

    Взято из библиотека XMLite

    Запостил: German_1984, 23 Января 2015

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

    • Тот же результат, без лишних действий.

      bool XIsEmptyString( LPCTSTR str )
      {
      CString s(str);
      s.TrimRight();

      return s.IsEmpty();
      }
      Ответить
      • bool XIsEmptyString(LPCTSTR str) {
            while (*str) {
                if (!_istspace(*str))
                    return false;
                ++str;
            }
            return true;
        }
        Тот же результат, без лишних действий. _istspace() пришлось поюзать из-за виндоблядского TCHAR'а.
        Ответить
        • Достаточно одного Trim'а, т.к. если строка из одних пробелов, то любой из двух ее полностью съест.
          А TrimRight работает быстрее чем TrimLeft, т.к. не нужно перемещать данные в памяти
          Ответить
          • >> А куда делся TrimLeft()?
            > Достаточно одного Trim'а, т.к. если строка из одних пробелов, то любой из двух ее полностью съест.
            Ага, я затупил, одного трима достаточно.
            Ответить
        • Неплохое говнецо получилось. Название функции намекает, что проверяется грубо говоря str[0]==0. В оригинальном ГК довольно наглядно видно что на самом деле строка должна быть или пустой или из вайтспейсов. В твоем же коде это нифига не наглядно. Надо или писать коментарий или переименовать функцию в XIsEmptyOrWhitespaceString Привет энтерпрайзным названиям названиям методов в Java.
          Ответить
          • > Неплохое говнецо получилось.
            Какая задача - такое и говнецо. Раз подсунули сишную null terminated строку в параметрах, значит будем с ней работать по-сишному. Любому сишнику вполне понятен этот код.

            А проблема с неоднозначностью Empty решается документацией.
            Ответить
            • Да я ж не отрицаю, что понятен. Просто надо сделать небольшое умственное усилие. А был бы коментарий - можно было бы не думать. Профит же.
              Ответить
              • Да чтение исходников чужой либы это уже крайний случай, имхо. Если найдётся дока, в которой написано, что XIsEmptyString "считает строку пустой, если она длиной 0 или состоит из пробельных символов (список символов прилагается)" - хер я полезу читать код...
                Ответить
            • > Любому сишнику вполне понятен этот код.
              Это да. Я хоть и не матёрый сишник, но проход по символам мне кажется более очевидным, чем какой-то trim. Или просто в первом коде не было подсветки.
              Ответить
            • >будем с ней работать по-сишному
              Пихать строку в класс и вызывать на нём методы очень по-сишному.
              Ответить

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