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

    +164

    1. 1
    $update = !empty($id) and $id > 0;

    Вопреки ожиданиям автора, выражение $id > 0 вообще никогда не принимается во внимание.
    /* Ознакомьтесь с приоритетом операций */
    Сначала отработает $update = !empty($id)
    потом значение из $update будет сравниваться с $id > 0 и результат сравнения никуда не попадёт.

    Рекомендация: используйте && вместо оператора "and".

    Запостил: zabuhailo, 09 Февраля 2011

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

    • Достаточным было бы использовать скобочки для данной операции.

      $update = ( !empty($id) and $id > 0 );
      Ответить
      • Верно. Использование скобок вернёт смыл этому коду, и в данном конкретном случае это будет даже наглядно показывать намерения программиста. Однако если скобок много в одном месте (и ещё они вложенные) и проч. код сразу перестаёт читаться. Всё же следуйте рекомендации - используйте && и не парьтесь.
        Ну уж если вы великий гуру и пишете только конкретный код только для себя - пожалуйста, можете даже использовать && и "and" в одном выражении.
        Ответить
    • уроки пхп на гк.ру
      Ответить
    • какой дебильный язык.
      Ответить
      • не пишите на нем никогда =)
        Ответить
      • Внезапно! И в перле тоже && приоритетнее =, который приоритетнее AND. Долой языки программирования, долой компьютеры, даёшь натуральное хозяйство!
        Ответить
      • И в Ruby «=» имеет больший приоритет нежели «and». ;-)
        Ответить
        • эпидемия. Зачем так делают?
          Ответить
          • Чтобы можно было сделать так:
            b = 10
            d = 20
            if a = b and d == 20 then
            	puts a # а имеет значение 10
            end

            Возможность есть, а стоит ей пользоваться — каждый решает сам.
            Ответить
            • А если использовать &&, то:
              if a = b && d == 20 then # эквивалентно a = ( b && d == 20 )
              	puts a # теперь это — true
              end
              Ответить
            • во-первых, присваивание в большинстве случаев лучше выносить в отдельный оператор. Особенно учитывая, что довольно частая описка = вместо ==.
              во-вторых, лишняя пара скобок - не такая уж избыточность.
              Ответить
              • Что куда лучше выносить — зависит от задачи. Язык дает возможности, а мы уже решаем, какие возможности подходят под задачи. ;-)

                А есть еще битовые операции: & и |, которые синтаксически напоминают логические. :-)
                Ответить
                • может быть ) но в приоритетах можно и запутаться
                  а с битово-логическими путаницы нет )
                  Ответить
                  • Запутаться можно лишь по незнанию, а не по невнимательности. Ведь с тем, что у && приоритет выше, чем у || мало у кого возникают трудности. ;-)
                    Ответить
      • Вы не поверите, но в Руби && и and работают точно так же
        Тоже дебильный язык, да?
        Ответить
        • я им как раз начал интересоваться. Пока не дал оценку, но на первый взгляд, пугает )
          Ответить
          • На мой взгляд там много вкуснстей, но слишком много синтаксического сахара
            Ответить
        • Язык не дебильный, он тут вообще не при чём.
          Говнокод пишет быдлокодер а не язык.
          Ответить
          • Вот и я о том же
            Ответить
            • смысл в том, что некоторые языки привлекают быдлокодеров
              Ответить
              • Сможете упорядочить языки по атрибуту привлекательности для быдлокодеров?
                Ответить
                • сходу вижу два три критерия:
                  * нижайший порог вхождения
                  * за работу на языке X платят хоть какие-то деньги
                  * не эзотерический (важно чтобы существовали источники копипасты)
                  Ответить
                  • 1. низкий порог вхождения - когда язык позволяет делать многое, и с огрехами прога работает, не читая мануала
                    2. очень популярный язык - и работа найдется, и на форумах можно лезть с любым вопросом, не читая мануала

                    на данный момент, это
                    1. пхп
                    2. ява
                    3. дельфи (паскаль)
                    4. си-решетка
                    Ответить
                    • > на данный момент
                      на данный момент есть эмпирические данные, теперь надо вывести теорию

                      будет теория - сделаем
                      0. Visual Bydlol
                      Ответить

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