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

    +10

    1. 1
    if ($invitationType == '1' || '2') {}

    Indian validation. WHYYYYY?

    Запостил: madfishGovnokod, 06 Июля 2016

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

    • идея специально для пыха: новый оператор `|||`.

      логично еще предположить оператор `&&&` но я еще не придумал что он будет делать.
      Ответить
      • (&&&) :: a b c -> a b c' -> a b (c, c')
        Fanout: send the input to both argument arrows and combine their output.

        The default definition may be overridden with a more efficient version if desired.

        http://tinyurl.com/control-arrow-ands
        Ответить
      • if ($invitationType != '1' && '2') {}

        На поверхности же лежит.
        Ответить
    • Идея специально для крестов: перегрузить оператор ==, чтобы он возвращал значение другого типа, для которого перегружен оператор ||.
      Ответить
      • Набросал: https://ideone.com/xwMvx7 . Добавить поддержку &&, != и посыпать шаблончиками - будет ваще красота.
        Ответить
        • Посыпал шаблончиками: http://coliru.stacked-crooked.com/a/e5ec0a5f334b22e6

          Делать как положено было лень, поэтому тот ещё говнокод. Из ценного — гетерогенное сравнение.
          Ответить
          • Это то, что надо! Я джва года ждал такой синтаксис!
            Ответить
            • Только сегодня, поддержка != и && в подарок: http://coliru.stacked-crooked.com/a/5ab4ab755cef7ff4

              На самом деле куча проблем: Если случайно написать не тот оператор, ни одного варнинга не будет. Придётся принудительно кастовать в бул, если хочется смешать сравнение с набором и ещё одну часть логического условия.

              Более безопасным будет синтаксис вроде

              if( x == (set || 10 || 11 || 12))
              Ответить
              • вместо "set", "any" для "||" и "every" для "&&"
                Ответить
              • > Более безопасным будет синтаксис вроде
                Как всё-таки люди любят усложнять себе жизнь...
                #include <iostream>
                
                template <class ValueType>
                constexpr bool anyOf(ValueType &&) { return false; }
                
                template <class ValueType, class FirstType, class... Rest>
                constexpr bool anyOf(ValueType && x, FirstType && value, Rest && ... rest) {
                    return x == value || anyOf(std::forward<ValueType>(x), std::forward<Rest>(rest)...);
                }
                
                int main() {
                    std::cout << std::boolalpha;
                    int a = 5;
                    std::cout << anyOf(a, 7, 19l, 5, 21u) << "\n"
                              << anyOf(a, 1, 2, 3, 4, 7) << "\n";
                    return 0;
                }

                Ещё пара обобщений и на утро у нас выйдет моноид.
                Ответить
                • Так же не интересно. Задача была заставить работать код подобный коду из топика.
                  Ответить

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