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

    +150

    1. 1
    2. 2
    nPosition = !bInvert ? data->pos_back
                                       : data->pos_front;

    Запостил: Aleskey, 12 Апреля 2011

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

    • - здравствуйте, я ваш новый сосед.
      - сверху или снизу?
      - что, вот так сразу?
      Ответить
      • Уныло.
        Ответить
        • "Уныло" уныло.
          хватить уже ныть )
          Ответить
          • Тогда я продолжу:
            Сидит программист в кафе, прогу пишет. Тут к нему подваливает тян:
            - Если хочешь со мной познакомиться, то меня зовут Маша.
            - А если я не хочу с тобой знакомиться, то как тебя зовут?
            Ответить
            • -Скажите, а у вас принтер занят?
              -да!
              -и чем же он занят?
              -сбережением энергии!
              Ответить
    • инвертирование bInvert :)
      Ответить
      • ʇɹǝʌuIq
        Ответить
        • А под андроидом рисует криво. В стандартном браузере по крайней мере.
          Ответить
    • Есть авторы, которые более-менее старательно соблюдают следующее правило: первой веткой в 'if'-е, как и первый веткой в операторе '?:' должен всегда идти "нормальный"/"естественный"/"штатный" вариант, а второй - "редкий"/"специфический"/"побочный"/ "извращенный" вариант.

      В данном случае можно предположить, что 'bInvert == 0' является штатной и естественной ситуацией, почему автор кода и предпринял усилия к тому, чтобы первой в '?:' была именно ветка, предназначенная для обработки ситуации 'bInvert == 0'.
      Ответить
      • В начале так похоже и было:
        //id 2 - двигаемся назад
        //id 1 - двигаемся вперед
        BYTE bInvert = (data->Flags & 0x0010) == 0x0010;
        int nPosition = 0;
        if (id == 2) {
        nPosition = !bInvert ? data->pos_back : data->pos_front;
        moveto(nPosition);
        } else if (id == 1) {
        nPosition = !bInvert ? data->pos_front : data->pos_back;
        moveto(nPosition);
        }
        Ответить
        • Вспомнилось с института:
          препод: функция меняет знак?
          студент: да!
          препод: (удивленно) Каааак?
          студент: Но не очень!!!
          Ответить
        • if (id == 1 || id == 2) moveto((id == 1) == !(data->Flags & 0x0010) ? data->pos_front : data->pos_back);
          Ответить
      • Логичнее было бы назвать переменную, скажем, bDirect и воспринимать ее как текущую !bInvert.
        Ответить
        • Ммм... Не согласен. На практике (опять же "есть люди которые...") по ряду причин удобнее "штатные" ситуации обозначать нулем, а "нештатные" - ненулевым значением. Например, если у нас есть некая структура 'Settings', содержащая установки, опции и т.п., то я хочу иметь возможность сделать так (пусть на С)

          Settings settings = { 0 };

          и ожидать, что в результате вот таким вот компактным образом я безо всякой головной боли получу "штатный" набор установок, работающий в 9 случаях из 10.

          А уж если мне надо соорудить что-то необычное, то я тогда уже выборочно подкручу то, что мне надо подкрутить, типа

          settings.bInvert = 1;

          При таком подходе "логичнее" выглядит именно 'bInvert', а не 'bDirect'. Но это, конечно, дело вкуса...
          Ответить

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