1. PHP / Говнокод #3272

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    static public function checkFingerprint($fingerprint = null)
    {
        $user = ServiceFactory::getServiceUsers()->getByID((int)$_COOKIE['__MW__accountID']);
        $fingerprint = (isset($fingerprint)) ? $fingerprint : Users::getFingerprint();
        $flag = (bool)($fingerprint == $user->generateFingerprint());
        if ( $flag )
          return $user->userID;
        else
          return 0;
    }

    не только индусские разработчики бывают весёлыми - это творение взрослого афроамериканского собрата. Перестраховался везде где только мог. Особенно доставляет приведение к bool результата сравнения :)

    Запостил: newmindcore, 19 Мая 2010

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

    • не доверять никому, даже себе - в особенности себе! паранойя...
      Ответить
    • АнтиВебкильная заSHITа.
      Ответить
    • да, только забыл проверить куку на существование. интересно, что тогда попадет в $user?
      а вообще последние 5 строк функции можно сократить в один тернарный оператор.
      Ответить
      • да, можно сократить; и не последние пять строк, а всю функцию вообще.
        сейчас это выглядит так
        static public function checkFingerprint($fingerprint = null)
        {
           $user = ServiceFactory::getServiceUsers()->getByID((int)$_COOKIE['__MW__accountID']);
            return (($fingerprint ?: Users::getFingerprint()) == $user->generateFingerprint()) ? $user->userID : 0;
        }


        постарался сохранить максимум авторского колорита :)
        Ответить
        • 2 тернарных оператора тут - зло, настолько сужать код нельзя. Это же в ущерб читаемости.
          Ответить
          • нет, очень даже читаемо; если избавится от любого из операторов, то придётся опять повторяться и писать условные ветки
            Ответить
            • если будет 3 или 4 условные ветки, вы всё это нагородите тернарными операторами? Тернарный оператор нужно использовать для элементарного условия, притом одного.
              static public function checkFingerprint($fingerprint = null) {
                $user          = ServiceFactory::getServiceUsers()->getByID((int) $_COOKIE['__MW__accountID']);
                $fingerprint = isset($fingerprint) ? $fingerprint : Users::getFingerprint();
                return $fingerprint == $user->generateFingerprint() ? $user->userID : 0;
              }
              Ответить
              • 3 и 4 ветки конечно нет, да и эти два условия будь они чуть сложнее я не стал бы сливать в одну строку.

                При желании можно назвать это "поменял один говнокод на другой", но я называю это некоторым изяществом, которое позволяет php.
                Ответить
                • у вас заниженный порог "говнокода" =)
                  Ответить
            • читаемость - тоже понятие субьективное. кому то брейсы {
              } тоже нечитаемы
              один прочитает и все понятно, другому нужна куча промежуточных переменных
              Ответить
              • чисто академически они менее читаемы, чем блоки "do - end", просто это уже "привычно" для всякого программиста =)
                Ответить
    • Не трогайте нигеров.
      Ответить

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