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

    +56

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    function issets($text)
    	{
    	if (isset($text) && $text != '')
    		return 1;
    		else
    		return 0;
    	}

    По просьбам радиослушателей :) Отрывок из админки неизвестного автора.
    Кусочки http://govnokod.ru/11650 , http://govnokod.ru/11647 , http://govnokod.ru/11646

    Запостил: kindofbear, 28 Августа 2012

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

    • $text = ' ';

      зохавает?
      Ответить
      • Видимо да) не проверял еще, пока что отложил этот трэш и содомию в сторону
        Ответить
    • Одному мне кажется, что isset(), в данном контексте, всегда будет возвращать истину?
      Ответить
      • Сложный философский вопрос :D будет ли неопределенное значение определенно при передаче его в качестве параметро в функцию?) Это не та переменная, которую вы ищете!
        Ответить
      • isset вернет false, если переменная:
        1. не была объявлена
        2. не была инициализирована
        3. была установлена в null
        Ответить
        • Т.е. в данном случае только если она была установлена в null...

          А при каких условиях (кроме, конечно, $a=null) в переменную может попасть null?
          Ответить
          • Отвечу сам себе: http://ideone.com/bzD7M.

            Т.е. если не обращать внимания на нотис, код все-таки видит существовала ли исходная переменная или нет.
            Ответить
            • Ну в предыдущем говнокоде из этого проекта, я уже говорил, что сомневаюсь, что у разработчика было включено отображение нотисов) так глобальные переменные то не отключены)
              Ответить
              • А волшебные кавычки?
                Ответить
                • Ну естественно включены. Начинающие программисты так любят быть волшебниками :D
                  Ответить
        • Все пункты по сути равноценны :) Если заюзать неинициализированную/необъявленную переменную, то она помимо выдачи ноутиса всё-таки инициализируется в null сама по себе...
          Хотя можно поставить перехватчик ошибок и бросать их как ексепшоны - тогда уже наконец-то оно откажется работать, пока не сделаешь как правильно. Правда, кто будет себе в ногу так стрелять...
          Ответить
          • Для создания более надежного кода обычно так и делают: ставят обработчики на все что можно и кидают исключения на каждый чих. Которые, кстати сказать, можно отлавливать глобально, если вдруг они будут выбрасываться за пределами блоков try-catch. С исключениями гораздо удобнее работать.
            Ответить
            • Хочешь надежности? Возьми Хаскел или Эрланг.
              Программы первого математически проверяются. Да и вообще продуманно спроектирован.
              Эрланг - для обработки множественных запросов. Позволит при частичном падении поднятся повторно и в любом случае, если упал один запрос - остальные останутся на плаву. (Про эрланг пока только из рекламных буклетов).
              Ну и в любом случае правильного программирования конечно никто не отменял.
              Ответить
              • Ну в хаскле есть пару плохих мест, но мало. Вот одно из них:
                Ну вот казалось бы все работает и куда уж проще:
                http://ideone.com/5lLxZ
                fac 0 = 1
                fac x = x*fac (x-1)
                main = print $ fac 5

                И вот уже все непредсказуемо вешается или падает:
                http://ideone.com/v75zo
                Не хватает области допустимых значений для функции, как в аде и возможности перехватить нарушение диапазона и продолжить выполнение.
                Ответить
                • > И вот уже все непредсказуемо вешается или падает
                  И на хаскеле срец, и в ногу стрелец.

                  Никто не мешает проверить диапазон и вернуть из функции Maybe/Either (аналог checked exceptions в яве), или же вызвать error и поймать его из IO кода (аналог традиционных исключений).
                  Ответить
                  • А это неправильное поощрение все-таки есть в языке и это плохо.
                    Ответить
                    • Вот еслиб было что-то типа:
                      fac _<0 = undefined
                      fac 0 = 1
                      fac x = x*fac (x-1)

                      то я бы ни слова не сказал.
                      Ответить
                      • Вот так устроит?

                        http://ideone.com/s077v
                        http://ideone.com/cFykx

                        Можно еще и так, но текст ошибки неконтролируем:
                        http://ideone.com/3KUQv
                        Ответить
                      • http://ideone.com/hUT71
                        А вот так вообще почти дословно ;)
                        Ответить
                        • Fac x | x < 0 = undefined
                          Fac 0 = 1
                          Fac x = x * Fac (x-1)

                          Спасибо. Вот это класс. :)
                          Ответить
                          • Fac x
                              | x > 0     = x * Fac (x-1)
                              | x == 0    = 1
                              | otherwise = undefined
                            Мне ещё вот этот ваш вариант очень понравился. Оно так математично выглядит. Ну просто заглядение.
                            Ответить
                  • >Maybe/Either
                    http://www.randomhacks.net/articles/2007/03/10/haskell-8-ways-to-report-errors
                    Ответить
            • Я в курсе, спасибо за "повторение - мать учения". :) Я просто говорю что ни разу не встерчал пока проекта, где тимлид такое одобрил(а) бы.
              Ответить

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