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

    +48

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    if (
        ($my_var[1] == "add_article" ||
         $my_var[1] == "add_topic" ||
         $my_var[1] == "add_topic2" ||
         $my_var[1] == "add_initiative"
        ) && (
            $_REQUEST["publish"] == "before" ||
            $_REQUEST["publish"] == "current")
    ) {
    
    } else {
    
        echo <<<EOD
    <!doctype html>
    
    EOD;
    
    }

    форматирование сохранено

    Запостил: shmaltorhbooks, 21 Июня 2012

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

    • Иной раз действительно легче обойтись без отрицания, засунув действие в else. А вот вывод строчки "<!doctype html>" заслуживает, как минимум, умиления.
      Ответить
      • > Иной раз действительно легче обойтись без отрицания, засунув действие в else.
        !(a && b) == !a || !b
        !(a || b) == !a && !b

        Отсюда получаем
        if (
            ($my_var[1] != "add_article" &&
             $my_var[1] != "add_topic" &&
             $my_var[1] != "add_topic2" &&
             $my_var[1] != "add_initiative"
            ) || (
                $_REQUEST["publish"] != "before" &&
                $_REQUEST["publish"] != "current")
        )
        Ответить
        • Де Морган?
          Ответить
          • Он самый ;)
            Противоречащая противоположность дизъюнктивного суждения — конъюнктивное суждение, составленное из противоречащих противоположностей частей дизъюнктивного суждения.
            (Уильям Оккам)
            Ответить
            • Да, можно и в философию запихнуть, шикарная фраза.
              Ответить
        • $allowed_actions = array("add_article", "add_topic", "add_topic2", "add_initiative");
          $publish_flavors = array("before", "current");
          
          if (!in_array($my_var[1], $allowed_actions) ||
              !in_array($_REQUEST["publish"], $publish_flavors)) {
            // shit
          }
          small improvement
          Ответить
        • Можно и так, только стало ли от этого понятнее? "Если топик из таких-то, а бублик из таких-то, то ничего не выводить, а иначе вывести конец." - идея ясно выражается на естественном языке. Эквиваленжтная форма воспринимается несколько сложнее.
          Так что, может, и некрасиво с точки зрения кода, но какой-то смысл есть. Имхо.

          (ну, и, конечно, на самом деле на данном ЯП лучше использовать множества, как показал Роман)
          Ответить
          • > Можно и так, только стало ли от этого понятнее?
            Лучше не стало, но и хуже не стало. Читаем как "Если топик не из таких то или запрос не такой то, то вывести доктайп". Но зато перестало смущать пустым блоком.

            > лучше использовать множества, как показал Роман
            Именно (хотя и с ними можно извратить условие и сделать пустой then).
            Ответить
        • Код оригинала понятнее чисто по человечески, и сопровождать его будет легче. Хотя ничего не имею против и варианта Бормана, написанного более грамотно с точки здения машинного разбора.
          Ответить
          • Имхо оба варианта вполне понятны для человека :)

            1) Если топик такой то и запрос такой то - не выводим нихрена, иначе выводим доктайп.

            2) Если топик не из таких-то или запрос не из таких-то то выводим доктайп.

            P.S. Второй, имхо, даже проще для понимания ...
            Ответить
          • > понятнее чисто по человечески
            Значит, те, кто понимает инвертированный вариант не хуже - не люди.
            Ответить
            • Хотел поставить eth0 плюс, а попал в минус ;(
              Ответить
            • Я всегда подозревал, что мы, программисты...
              Ответить
            • Мы не люди: мы - программисты... :)
              Ответить
            • > Значит, те, кто понимает инвертированный вариант не хуже - не люди.
              Значит, те, кто не понимает инвертированный вариант не хуже - люди.
              Значит, те, кто не понимает неинвертированный вариант не хуже - не люди.
              Значит, не те, кто не понимает неинвертированный вариант не хуже - люди.
              Ответить
              • 1. Fallacy of denying hypothesis.
                2. True.
                3. Fallacy of denying hypothesis x2.
                Ответить
              • Но ведь последние два утверждения противоречат приведённой цитате!
                Ответить
              • Значит, те, кто понимает инвертированный вариант хуже - люди.
                Не значит ли, не те, некто не понимают неинвертированный вариант не хуже - не люди?
                Либо доводи всё до абсурдного абсолюта. Либо вообще не пробуй
                Ответить
                • Не значит, не те, некто не понимают неинвертированный не вариант не хуже не люди. Не?
                  Ответить
    • показать все, что скрытоКГ/АМ! (спойлер: ОП - ХУЙ!)
      Ответить
    • показать все, что скрытоКакой багор )))
      Ответить

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