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

    +157

    1. 1
    2. 2
    3. 3
    if (strlen($arResult["ERROR_MESSAGE"]) <= 0){
    // любая ахинея
    }

    2014 год. Битрикс все так же терпеливо ожидает патент на строки отрицательной длины.
    Полагаю, такой икспрешн используется не только в компоненте корзины, учитывая страсть авторов к копипасте.

    Запостил: velosipedistorg, 30 Мая 2014

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

    • Кажется в Фортране у массивов могут быть отрицательные индексы, но вот будет ли строка отрицательной длины, если большая часть ее элементов находится слева от нуля - это сложный теоретический вопрос!
      Ответить
      • > но вот будет ли строка отрицательной длины, если большая часть ее элементов находится слева от нуля - это сложный теоретический вопрос
        Не будет. Длина отрезка же не становится отрицательной, если оба его конца лежат слева от нуля. Вот и длина строки всегда будет неотрицательной.
        Ответить
        • Ну это только одна точка зрения. У отрезка нет направления, а что, если мы учитываем и направление? Т.е. мы меряем смещение, а не абсолютное расстояние - смещение вполне может быть отрицательным.
          Ответить
          • Само собой, что слово длина это всего лишь абстрактное обозначение, и мы можем любую хрень назвать любым словом - площадь - скоростью, длину - перемещением, а сумму кодов символов - длиной, и от этого совершенно ничего не изменится... Но все же длину (расстояние, метрику) обычно определяют как неотрицательный скаляр.
            Ответить
            • На сколько я могу судить, обычно, длина в Н-мерном пространстве, это расстояние Минковского второго порядка. Но если мы возгорим желанием попробовать другие порядки, (например, третий), то длины вполне могут быть и отрицательными даже в таком фреймворке. :)

              Это как бы намек на то, что корень квадратный из сумы квадратов не обязательно положительное число, и примерно в 50% случаев он таки отрицательный.
              Ответить
              • Ввести "типа норму" можно какую угодно, вот только если она не соответствует общепринятым аксиомам нормы, с ней дальше работать будет не очень удобно.
                Ответить
                • Это как это, математика должна соответствовать общепринятым нормам? А вы значение корня квдартатного находите голосованием?
                  Ответить
                  • Я имею в виду общепринятые в математике же аксиомы нормы. Из которых прямо следует неотрицательность нормы.

                    Конкретно функция квадратного корня (в вещественных числах) определена как положительное число. Да, у положительных чисел, вообще говоря, два корня, и что? Они просто обозначаются как sqrt(x) и -sqrt(x). Не вижу в этом никакой проблеы.
                    Ответить
                    • То, что квадратный корень положительного вещественного дает два результата - отрицательный и положительный (за исключением нуля) по-моему вполне общепринято, в узких математических кругах. И если уж мы признали некоего никому неизвестного выскочку Декарта, с его кощунственной аналитической геометрией, то мы должны так же сознаться, что если мы меряем длину в Н-мерном пространстве как корень квадратный из суммы квадратов разностей координат в каждом направлении - то мы так же должны принять, что между любыми двумя точками не совпадающими друг с другом, есть два разных расстояния, одно со знаком плюс, а другое - со знаком минус.
                      Ответить
                      • Признать-то можно что угодно. Вопрос в том, зачем? Вы можете назвать практические преимущества длины, принимающие отрицательные значения?
                        Я вижу только минусы. Потому что всё равно придется брать потом модуль, чтобы вывести многие полезные свойства.
                        Ответить
                        • Вообще говоря, мы можем придумать математический объект с любыми аксиомами, и выбрать подходящие под них определения "нормы", "метрики", "джигурды" и чего-то там еще. Никто нам этого не запрещает.

                          И иногда оказывается, что такие объекты обладают какими-то интересными особенностями, и их даже можно где-то применить. Те же поля Галуа в свое время были никому не интересной игрушкой: "да кому нужны эти конечные поля с упоротой арифметикой!".
                          Ответить
                          • >да кому нужны эти конечные поля с упоротой арифметикой
                            Прочитал сначала как "конченые поля". Ну правильно, надо только взять набор терминов и аксиом - и начать применять к ним логику.
                            Лобачевского вот тоже сначала сумасшедшим считали.
                            "Ну как сумма углов треугольника может отличаться от 180 градусов?"
                            Ответить
                        • А почему должны быть практические преимущества? Или, по вашему правильно только то, что выгодно?
                          Ответить
                          • Не правильно, а используется. Правильности то нет. Можешь себе считать как хочешь, никто не запрещает. Просто так удобнее.
                            Ответить
                      • > как корень квадратный из суммы квадратов
                        Как у тебя сумма квадратов отрицательная стала? Разве что изначально у тебя ещё и комплексная координата есть.

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

                          Может быть и пространствам wvxvw с джвузначной метрикой когда-нибудь найдут применение ;)
                          Ответить
                          • С расстояниями Минковского - еще хуже, там не только положительные и отрицательные размеры получаются, но и комплексные.
                            Ответить
                          • >Не у всех математических объектов есть физический смысл. Часть - слишком обобщенные и абстрактные, чтобы описывать наш мир
                            Оно обычно ведь как бывает: придумают математики какую-то абстрактную хрень, она как бы логична, стройна и непротиворечива, но с практической точки зрения никому не нужна. Вот придумают они и тихо положат себе на полочку.
                            А потом, бац! Кто-то держа в уме эту теорию видит аналогию в прикладной области, и берет уже готовую теорию, нет нужды пилить своё с доказательствами и теоремами.
                            Ответить
                        • Читаем внимательно. Сума квадратов никогда не становилась отрицательной, только ее корень квадратный, которых по определеную два - положительный и отрицательный.
                          Ответить
                          • Да, мой косяк, проглядел.
                            Где-то чувствую наёбку, а вот где, пока придумать не могу.
                            Ответить
                            • Ну другой путь интерпретировать тезис "между точками А и Б есть два расстояния равных по модулю, но различающихся знаками" будет наблюдение, что расстояний есть АБ и БА, и с какой стороны ни посмотри, они практически одинаковые, за исключением того, что одно начинается там, где кончается другое, что можно описать разными знаками.

                              Может быть для этого нужно принимать аксиому выбора, а може и нет. Я хз.
                              Ответить
                      • Представь себе это в полярных координатах. Там длина вектора одна - r.
                        Ответить
                        • Как так одна, а если найду?
                          Ответить
                        • потому что (не)учитывается направление в (2)(3)мерном пространстве. давайте за длину примем вес.
                          Я ВЧЕРА ДЛЯ МАМКИ ДРОВА КАЧАЛ, 200 ТОНН
                          Ответить
                          • Интересная штука. Вес металлического стержня диметром 1 метр из точки A в точку B примем за длину.
                            Ответить
                            • А летом расстояние между A и B будет внезапно сокращаться, красота.
                              Ответить
                              • Стержень должен быть слаборасширяемым. Простая линейка ведь становится длиннее. Но не на тот порядок, конечно.
                                Ответить
                                • А вот если принять этот источник погрешности, но использовать материал, который от нагрева сильно сужается, можно заставить службы сделать дороги до зимы. Ведь зимой стержень расширится и в отчёте цифры будут меньше.
                                  Ответить
              • А можно поподробнее про отрицательный корень? Первое что приходит на ум — комплексные числа, к которым понятие «отрицательный» неприменимо.
                Понятие «квадратный корень» обычно означает «арифметический корень второй степени», который по определению не отрицателен.
                Вещественный корень второй степени имеет два решения. Для вещественных чисел они отличаются только знаком. Для компексных всё сложнее и в общем случае отрицательных чисел там не получается вообще.
                Ответить
                • Попробуйте возвести -2 во вторую степень, и убедитесь в том, что -2 - точно такой же корень квадратный из четырех, как и 2.
                  Ответить
                  • > Понятие «квадратный корень» обычно означает «арифметический корень второй степени», который по определению не отрицателен.

                    В выражении гипотенузы треугольника через корень из суммы квадратов катетов как раз используется арифметический корень чтобы не доёбывать всех формулировками типа «неотрицательное значение вешественного корня из...»

                    >Неотрицательный квадратный корень из неотрицательного числа a называется арифметическим квадратным корнем и обозначается с использованием знака радикала
                    http://ru.wikipedia.org/wiki/Квадратный_корень
                    Ответить
                    • Выражение гипотенузы через катеты - часный случай для прямоугольных треугольников. Часный случай теоремы Пифагора (которая для всех треугольников в двумерном пространстве), которая часный случай для расстояний в эвклидовых пространствах, котрые ни что иное, как часный случай расстояния Минковского, о котором тут уже шла речь раньше.

                      Да, можно не отдельно выделить группу неотрицательных корней - ну и что?
                      Ответить
                      • >часный
                        Граматикалиш шмайсер доставален! Ляден! Фойер фрай!
                        Ответить
              • >корень квадратный из сумы квадратов

                а что у вас там в квадрат подносят?
                Ответить
      • >но вот будет ли строка отрицательной длины
        Полагаю, коллеги, имея понятие сложения(конкатенации) строк: "abc"+"de"="abcde"
        при этом замечу длины их всегда складываются, мы можем ввести обратную операцию их вычитания:
        "abcde"-"de"="abc"

        Тогда расширив такую функцию на все множество строк легко можно получить строки отрицательной длины.
        Смысл же строки отрицательной длины, можно выразить например так:
        конкатенация со строкой имеющей длину с противоположным знаком удаляет из искомой строки символы, которые содержатся в обоих строках.
        Ответить
        • Отрицательная строка - строка, состоящая из антибукв. Когда встречается буква и антибуква, они взаимно уничтожаются. Кажется, я это где-то уже слышал...
          Ответить
          • А что?
            replace("[any]",""), где any - регулярка с набором символов
            Тогда например удаление всех пробельных элементов запишется как сложение со строкой пустых антибукв до победного конца.
            Ответить
          • Главное, чтобы выполнялись требования к полю, дистрибутивность умножения через сложение, и чтобы нейтральный элемент сложения в умножении не учавствовал, или как-то так. И все пучком буде.
            Ответить
      • Отрицательные строки...? Гениально!
        Ответить
    • Это боязнь того, что "функция хуево работает и вернет меньше нуля".
      Сам пострадываю временами.
      Ответить
    • коллеги, строка — виртуальный костыль к «массиву символов». Какие отрезки? Как выглядит массив отрицательной длины???

      либо все функции плохо работают, и надо всё перестраховывать (перекладывая на себя роль интерпретатора, брейнфак и пр.), либо доверять уже авторам интерпретатора в таких самоочевидных мелочах. Сломаелось — багрепорт, камент над выражением.

      А тут тишина, и каждый раз пробегая глазами этот код , я спотыкаюсь об это немое говно.
      Ответить
      • > Сломаелось
        — багрепорт, камент над выражением.
        и вернуть -1, если длину строки вычислить не удалось
        Ответить
        • В доке про отрицательные числа не сказано ничего
          http://php.net/manual/en/function.strlen.php

          Единственный комментарий к доке — про возвращаемый null, возвращаемый при случайном измерении массива (как будто это может кого-то в Битриксе напугать), и то после 5.3 версии.

          Пруф http://codepad.viper-7.com/M9Azy1
          Ответить
          • ну да. в пыхе, либо длина вычислится, либо пых упадет. обработки ошибок ведь нет
            Ответить
    • Хотя нет, беру свои слова назад — не останавливайтесь, ради бога! Такая философская дискуссия заваривается!

      Битриксу лучи благодарности за такой инфоповод!
      Ответить
      • Это потому что здесь математиков нет. Я думаю научные статьи уже лежат где-то в сборниках.
        Ответить
    • Моя реализация QuickSearch, с поиском места подстановки значения, выдаёт отрицательный индекс, если элемент уже есть в массиве, например) Очень удобно.
      Пора патентовать отрицательные индексы крч!
      Ответить
      • «отрицательный» индекс (да хоть пустая строка) — это допустимый индекс в «массивах» похапе.

        Или на вашей сборке
        count(array(-1 => 'foo'))
        показывает отрицательное число?
        Ответить
        • ну и кроме того, все целые числа в пыхе беззнаковые — 2 в 32 степени поделить на два. [link]http://ru2.php.net/reserved.constants.php#constant.php-int-max[/link]

          Иначе отрицательных чисел в пыхе просто не было бы.
          Но, в конечном-то счете, это все равно 4 миллиарда положительных чисел.
          Ответить
        • С похапе я знаком весьма поверхностно, но есть подозрение, что count не может выдать отрицательное значение, ибо это, ЕМНИП, количество элементов...

          Я на MAXScript пишу)
          Ответить

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