Кресты / Говнокод #17530 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
static bool convertCharToHexByte(char& ch)
{
	if (ch >= '0' && ch <= '9') {
		ch -= '0';
		return true;
	}

	if (ch >= 'a' && ch <= 'f') {
		ch -= 'a';
		ch += 0xA;
		return true;
	}

	if (ch >= 'A' && ch <= 'F') {
		ch -= 'A';
		ch += 0xA;
		return true;
	}

	return false;
}

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

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

  • А в чем говно? Имеет право на жизнь. Тем более это, скорее всего, деталь реализации большей функции, и никто этот convertCharToHexByte() из других модулей дергать не будет.
    Ответить
    • возможно автор считал, что нужно было писать именно
      [0-9A-F]
      Ответить
      • Ну т.е. только в названии (т.к. на выходе не байт, а nibble внутри чара)?
        Ответить
      • P.S. Нужно понимать, что у нас сейчас намного меньше контекста, чем у вас. По сравнению с тем, что мне доводилось видеть и править, этот код отлично читается и в нём нет ошибок. Поэтому, в данном конкретном треде, я отношусь к автору с оптимизмом и симпатией, и пытаюсь оправдать код, а не обосрать его.

        Мы ведь даже не знаем, где этот статик находится - в публичном интерфейсе класса, в приватной части класса или же вне класса в cpp'шке. А от этого многое зависит...
        Ответить
  • Надо ещё больше return'ов добавить! Полезность порчи входящего чара тоже под вопросом. Скорее всего вызывает эту функцию другой говнокод. Хотелось бы на него посмотреть
    Ответить
    • > Надо ещё больше return'ов добавить!
      Чем return'ы тебе не угодили? Предлагаешь флаг мутить и возвращать?

      > Полезность порчи входящего чара тоже под вопросом.
      Предложи свой интерфейс. Там все варианты равнозначны, как мне кажется (сходу придумал штуки 4). И для приватной функции можно забить на перфекционизм.

      > Скорее всего вызывает эту функцию другой говнокод.
      Да какой-нибудь банальный цикл, составляющий из помятых этой функцией чаров число или байтстринг. На самом деле, bool и char & в таком контексте довольно удобны. А эта convertCharToHexByte, скорее всего, приватная.
      Ответить
      • >Чем return'ы тебе не угодили? Предлагаешь флаг мутить и возвращать?

        помниться у нас тут эпичный спор был. Еще когда стертор был жив.
        Ответить
      • Ну назови её флагом. Функция должна иметь одну точку выхода, а не четыре. Даже если она такая небольшая и понятная.

        Если использование исключений нежелательно или очень хочется иметь булеан на выходе, то я бы использовал интерфейс с чарИн и чарОут. Если юзеру охота, то может сувать туда одну и ту же переменную, а может и разные. Но он это будет делать явно.
        Ответить
        • > Функция должна иметь точку выхода, а не четыре.
          Дейкстрены объелся?
          Хоть конечно я тоже считаю что порча казённого чара и отсутствие else плохо.
          Ответить
        • > Но он это будет делать явно.
          Я еще раз повторюсь, что если эта функция - приватный хелпер, то совершенно похеру. Но ОП так и не сказал нам, откуда эту функцию юзают.

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

            и да, наверное всё-таки чарОут. В чём бенефит интОута?
            Ответить
            • > В чём бенефит интОута?
              Да в общем-то ни в чём... Варианты равнозачные. Просто мне int там показался более семантичным - "целое число от 0 до 15".
              Ответить
              • Поддерживаю.

                Об ретурнах -ИМХО нет никакой разницы. Но из 3ного цикла проще ретурнуться чем каскадно брякнуться с сохранением состояния
                Ответить
              • static bool convertCharToHexByte(char ch)
                {
                        int r=-1;
                	if (ch >= '0' && ch <= '9') {
                		r=ch - '0';
                	}
                        else if ((ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')){
                		r=(ch|('a'-'A')) - 'a';
                		r += 0xA;
                	}
                	return r;
                }
                in-out. чё разве, так нельзя написать?
                И они еще борются за почётное звание «чистых языков типа хаскеля», - это же кошмар, кошмар!
                Ответить
                • Можно и так. Но тут *особое значение* возвращается. Хотя, для сишки, вполне адекватно. Там в каждой первой функции возвращают какое-нибудь особое значение.
                  Ответить

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

Переведи на "PHP", guest!

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


    8