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

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public function validate($value) {
        try {
            $date = new \DateTime($value);
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

    DateTime Validator

    Запостил: bykovski, 08 Декабря 2015

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

    • Объясните мне-"блондинке" в чем говнокожесть данного кода?
      И еще - зачем тут catch (\Exception $e) ?
      Ответить
      • Потому, как $e нигде больше не встречается...
        Ответить
      • > в чем говнокожесть данного кода
        В использовании исключений для неисключительных ситуаций (питонистам не понять, для них даже конец просматриваемого массива - исключительная ситуация).
        Ответить
        • Да, это правда - я питоню по-маленьку :) А ещё с-плюс-плюшу и сю :) Но все равно не понять)
          Ответить
        • Вы про StopIteration?
          Ну если exception стоит столько же, сколько и обычная проверка то в чем проблема?

          В java вон есть checked exceptions, и все те три человека в мире которые умеют ими пользоваться -- они ими пользуются и рады
          Ответить
        • А в чем проблема-то, кроме незначительного падения скорости?

          >питонистам не понять, для них даже конец просматриваемого массива - исключительная ситуация
          Для сишников это вообще фатальная ситуация, и что?
          Ответить
          • > А в чем проблема-то
            Да хуй с ней, со скоростью. Просто читается плохо. Особенно если автор ловит не конкретное исключение, а абстрактный Exception, а в try засунул побольше разных вызовов.

            А если юзаешь дебаггер, то из-за подобной хуйни нельзя включить "break on exception" ибо будут сотни ложных остановок.

            > Для сишников это вообще фатальная ситуация
            Ты не понял. Под концом массива имеется в виду не вылет за границу, а StopIteration во время обхода массива. А обращение по кривому индексу - таки исключительная ситуация.
            Ответить
            • Так это не выход за границу массива, а исчерпание итератора же.Протокол foreach.

              > Просто читается плохо.
              Зато безопасно по умолчанию.

              >нельзя включить "break on exception"
              Он в питоне вообще есть? Алсо, зачем это там?
              Ответить
      • Кроме того что продуцировать эксепшены в ЛЮБОМ языке программирования это не камефлю, в данном случае еще будет валидны такие данные как "now", "2 days", "@123352452341" - не думаю что это ожидалось когда делали валидацию
        Ответить
        • Это не баг, это фича!
          Ответить
        • new \DateTime("День рождения Льва Толстого")
          Ответить
          • Я запомнил год его рождения через число e (хотя предлагали наоборот запоминать).
            Ответить
            • А я слышал, как другие запоминают, но сам не помню ни e, ни год рождения Толстого, я их наверно и не использовал.
              Кстати, кому-нибудь знание e пригодилось? Вот знание пары знаков пи иногда нужно, а как с e? По идее, человек либо использует сразу функцию exp, либо заданную где-то в стандартной библиотеке константу (если это зачем-то понадобилось), либо для прикидки на бумажке экспоненту раскладывает в ряд и работает с аргументом.
              Ответить
        • "now", "2 days"

          Почему? Это вполне удобно.
          $dateFrom = (new DateHelper('now - ' . self::DATE_FROM_INTERVAL . ' days'))->dbFormat();
          Ответить

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