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

    +168

    1. 1
    2. 2
    3. 3
    4. 4
    function m($s, $re)
        {
            return preg_match($re, $s);
        }

    Из какого-то движка такая вот функа в файле function.php

    Запостил: Arigato, 11 Октября 2010

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

    • Мдя, кто-то не выспался...
      Ответить
    • обфускация мозгов. Отличная перспектива поддерживать код, полагающийся на подобные лисапедики. Например:
      include 'funclib.php';
      $x1=1;
      $x2=0;
      $xx=-1;
      if(a($x1,$x2)>0) {
       z(p(),i($xx);}
      while(n()) {if(q($xx)==r($x2)) break; $x2+=$xx;}

      можно фантазировать и далее, но впечатление уже создается: что делает код, непонятно, и ловля жуков становится практически невозможной
      Ответить
      • имя функции m как и порядок параметров явно указывают что какой-то Перлщик писал. Перловый вариант: $s =~ m/$re/; (n.b. m == match)
        Ответить
        • вот уж у кого кого, а у "перлщиков" нет[не должно быть] привычки каждый чих обёртывать в функцию (как в данном случае). Язык располагает к тому, чтобы многие вещи кратко и удобно оформить прямо на месте.
          imho
          Ответить
          • так код и превращается в помойку... ))
            Ответить
            • кратко и удобно - это не помойка. помойка - это когда слишком непонятно.
              Ответить
            • то есть когда в коде куча функций (не геттеры/сеттеры, а именно какие-то процедуры) с 1-2 строками кода это не помойка?

              я и не думал, что воспримете так буквально, дескать "функции ваще не нужны, лучше прям на месте весь код писать" ...
              Ответить
              • бывают случаи библиотек-"оберток". ну например паскалисту очень желанна функция
                function writeln($s){echo($s."\n");}
                и т.д.
                Ответить
                • угу а сишники инклудят stdio :-)
                  Ответить
                  • и это даже не дело привычки. Если описать такую библиотеку в виде интерфейсов, то несколько упрощается перевод кода из одного языка в другой. Например, мне помогало при переводе алгоритма из дотнет в жабку и из пыха в жабку
                    Ответить
              • а перловики нередко именно так и делают. часто даже в известных модулях код чуть ли не на половину состоит из говнорегекспов.
                Ответить
                • так вот откуда привычка применять регекспы где надо и где не надо, в т.ч. для парсинга и вырезки тегов и линков из хтмл.
                  Ответить
                  • в 90% случаев регексп - это костыль. но одно дело когда нужно просто выдернуть что-то со странички - здесь это оправдано и другого решения в общем. то и нет. но представьте что было бы если бы браузер разбирал страницу регекспами.
                    Ответить
                    • в 90% регексп - не костыль, просто неоправданное использование. Всегда стоит почитать книжки по предметной области. Например, в любой книжке по компиляторам и парсерам упоминаются иные грамматики, которые не являются регулярными - начиная с контекстных левосторонних... золотое правило: для конкретной задачи нужно подбирать наиболее подходящий инструмент.

                      здесь же беда регекспов в их популярности. Кодомартышки не интересуются предметной областью, поэтому они берут первый попавшийся инструмент - неважно, годится он для задачи или не очень.
                      Ответить
                      • ну хак и не может быть правильным, на то он и хак. как например правильно выдернуть что-то из готовой хтмл странички. ответ - никак. как быстро, не затрачивая ресурсов убрать теги из текста. ответ - никак. все это костыли. просто нужно понимать когда это оправдано, а когда нет.
                        Ответить
                        • > ну хак и не может быть правильным
                          хак - это вы о регэкспах? ну, значит и перл - язык для хакеров ))

                          > как например правильно выдернуть что-то из готовой хтмл странички
                          правильно - пропарсить документ путем SAX, реагируя на определенные теги или их комбинацию. Недостаток один - документ должен быть правильно сформирован (well-formed XML), что относится к XML, xHTML, но, увы, не HTML4-.

                          > как быстро, не затрачивая ресурсов убрать теги из текста
                          Если нам дана только строка, то:
                          быстро "не заморачиваясь" -- использовать (осторожно) те же регекспы. Можно и просто в цикле методом indexOf поубирать теги.
                          Если же у нас есть DOM-дерево, уже построенное парсером, тогда нам уже и делать нечего

                          > ответ - никак
                          во-первых, если задача есть, ее надо решать. Во-вторых, я понимаю ваше "никак" в том смысле, что не существует и красивого, и быстрого, и нересурсоемкого способа решения (кстати, как любой другой) задачи.
                          Вот именно поэтому нужно проанализировать различные существующие пути и выбрать наиболее подходящий в данном случае.
                          Ответить
                          • // но, увы, не HTML4-.
                            вот именно. но даже если бы у нас был реальный xhtml любое изменение дизайна поломало бы наш гениальный алгоритм.

                            // использовать (осторожно) те же регекспы.
                            но это и есть хак, и результат не предсказуем. так что или правельно или быстро. увы )

                            никак означает что не все задачи имеют правильное решение.
                            первая задача в принципе не имеет надежного решения.
                            вторую нельзя правильно решить без полного анализа хтмл и всех используемых языков включая тот же джаваскрипт.
                            Ответить
                            • > любое изменение дизайна поломало бы наш гениальный алгоритм
                              смотря какой алгоритм, и какое изменение.

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

                              > но это и есть хак, и результат не предсказуем. так что или правельно или быстро. увы )
                              это не хак. Это вполне документированная возможность, никакого шаманства.
                              Но все зависит от задачи. В одном случае мы решаем одну задачу, в другом другую, похожую.

                              > вторую нельзя правильно решить без полного анализа хтмл и всех используемых языков включая тот же джаваскрипт.
                              вторая задача: убрать хтмл-теги, то есть все то, что между уголками. Если формулировать именно так, то той же пхп-функцией нормально убираются. Без парсинга и анализа.
                              Ответить
                              • спор бессмысленный и беспощадный.... скорее всего говорим об одном и том же но разными словами. проехали в общем. ))
                                Ответить
                        • вернемся к исходной проблеме: убрать из введенной строки теги
                          1. Раз мы в разделе PHP, то платформа нам дает готовую функцию strip_tags
                          2. Почему поручать регекспам это считается плохо: на самом деле, не так уж плохо. А вот плохо то, что 99% тех, кто использует регекспы для вырезки тегов, используют регулярку, которая обламывается на вложенных тегах
                          Ответить
                          • // готовую функцию strip_tags
                            echo strip_tags("<script>hello</script>");
                            угадайте с одного раза почему оно не убирает джаваскрипт.
                            Ответить
        • вряд ли перлщик. просто кому-то очень было лень писать preg_match
          Ответить
          • А еще стандартный порядок параметров не устраивал.
            Ответить
            • это - практически философская проблема, сродни проблеме курицы и яйца. Например, возьмем популярную функцию split. В ней тоже порядок параметров зависит от языка - где то сначала идет делимитер, затем строка, где-то наоборот. Та же ситуация с функцией поиска и замены подстроки. И т.д.
              Ответить
    • $perl=~m// ;)
      Ответить

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