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

    +173

    1. 1
    define("RANDOM_NUM", rand(0, 10000000));

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

    Запостил: jokz, 08 Сентября 2011

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

    • сишник, что ли?
      Ответить
      • Даже для сишника это черезчур.
        Ответить
      • ну на вид это код человека очень далекого от программирования. можно еще повыкладывать оттуда, но смеяться не над чем, просто стандартное гавно новичка. Но вот эта строка зацепила.
        Ответить
    • Это из категории "элегантное говно". =)
      Ответить
    • показать все, что скрытоПоясните что не так. Я не вижу здесь говна. И только не нужно говорить что я новичок и говнокодер! Я просто НИКОГДА не использую эти статические глупые НЕпеременные, их можно вообще отменить и РНР будет работать. Правда придется поудалять везде такие строчки и вместо них написать $RANDOM_NUM = 54546; ну и т. д.
      Ответить
      • Насколько я понимаю, задумка была получать каждый раз при указании константы НОВОЕ рандомное число, что конечно глупость. Но смеятся над ней, все равно что смеяться над рисунками детей из детского сада.
        Ответить
        • Не, ты наверное не прочувствовался. Лично для меня самый щик это то, что вот этот код он работает. При каждой загрузке скрипта константа будет разной, и если не использовать ее более одного раза для одной таблицы, то все будет хорошо и процент коллизии будет 1 к 10 миллионам.
          Ответить
          • Закон Мерфи в программировании работает лучше, чем где бы то ни было.
            Соответственно, счастливого дебага. :)

            Хотя конечно, математически забавно, согласен.
            Ответить
      • таки прости, а если где-то глубоко в объекте тебе нужно получить какоето значение, которое ты объявил в начале кода? ну например, адрес сайта на котором работает движок. передавть как аргумент? а если он каждому методу будет нужен? а если не только адрес сайта, но и несколько глобальных настроек? создавать статический класс и в него все пихать?

        нет уважаемый, тут вы не правы.
        Ответить
        • всё дело в том, что increazon - новичок и говнокодер
          а так же - уэб-обезьянка, а они все не понимают то, что делают
          Ответить
          • Вот я провёл испытание. Каждый раз новое значение, можно использовать его во всем проекте. Конечно оно не поменяется ибо статично. http://ideone.com/juytW
            Ответить
            • что за хуйню ты сейчас сморозил?
              Ответить
              • > Каждый раз новое значение, конечно оно не поменяется ибо статично.
                Ответить
                • показать все, что скрытоКаждый раз новое значение при запуске скрипта. Не поменяется ибо статично при использовании RANDOM_NUM много раз во время выполнения скрипта. Пример: echo RANDOM_NUM; var_dump(RANDOM_NUM); Вы как программисты должны понимать с полу слова как говорят, но вижу я что вы не программисты.
                  Ответить
                  • > но вижу я что вы не программисты
                    Сходите к окулисту, подозреваю, у вас что-то со зрением :-(
                    Ответить
                  • И заодно к логопеду. Иначе не то что что с полуслова с цельного предложения не поймут, и профессия тут ни причем.
                    Ответить
                  • СПАСИБО КАПИТАН ОЧЕВИДНОСТЬ, тут все настолько плохо понимают код, что Ваще разъяснение о том, что константа не измениться в ходе выполнения скрипта нас всем открыла глаза! огромное спасибо.
                    Ответить
    • что я вижу? Инкрезон опять облажался? )
      Ответить
    • Если бы rand был чистой функцией, то тогда код бы работал так, как задумано - RANDOM_NUM всегда бы равнялось значению rand(0,10000000). Но так как функция rand от одних и тех же аргументов может давать разные значения, то код работает не так, как задумано.
      То есть код обломался из-за наличия грязных функций.
      Это ещё один аргумент против С++.
      Ответить
      • Толсто. "Грязные" функции есть во всех языках, иначе мы бы не могли увидеть результаты работы наших программ (даже в Haskell есть "грязь" - в монадах). rand() не может быть чистой по своей семантике. Представляю себе реализацию "чистой" rand:
        int rand()
        {
            return 42; // random number from holy aliens
        }
        Ответить
        • Нет, конечно, можно передавать состояние rand() в качестве аргумента, но управление этим состоянием в вызывающей функции превращается в сущий ад и приводит к плохо читаемому коду. Здесь инкапсуляция состояния, как правило, выгоднее чистоты.
          Ответить
          • Можно как в дельфе rand() возращает одно и тоже значение а если впереди вписать randomize() то типа случайные.
            Ответить
            • Это только ухудшает ситуацию, делая код ещё более императивным. rand() в этом случае остаётся "грязной" - её результат зависит от глобального состояния.
              Ответить
          • Не вижу в этом ничего плохого. А если я хочу иметь несколько параллельно работающий и не зависящих друг от друга рандомайзеров?
            Ответить
            • Я ждал этого вопроса :)
              Да, чистые функции сияют во всей красе в многопоточной среде. В C это (как и многое другое при использовании многопоточности) будет проблемой. Здесь я с вами согласен.
              В java, к примеру - это не проблема: в каждом потоке можно иметь собственный объект Random, каждый из которых хранит собственное состояние, не вынуждая своего клиента передавать состояние каждый раз явно.
              Интересно, насколько серьёзными могут быть последствия параллельной модификации внутреннего счётчика rand()? Случайные числа будут менее случайными? :)
              Ответить
              • Я так думаю проблема не случайной случайности не стоит перед прогером использующим функцию rand. Для случаев когда нужна более менее случайная случайность (сорь за петросянство) используют специальные либы.
                Ответить
                • Просто в теории могут ли быть повреждения памяти, появление битых указателей и т.п.
                  Ответить
              • > Интересно, насколько серьёзными могут быть последствия параллельной модификации внутреннего счётчика rand()? Случайные числа будут менее случайными? :)

                Именно так. Нарушается полезное свойство ГСЧ - последовательность полностью восстанавливается по стартовому значению.
                Ответить
                • Да, согласен с вами. Работа в многопоточной среде всегда делает жизнь программиста сложнее, здесь ему придётся написать свой "чистый" int rand(int). Стандартный же будет удобен в 95% случаев.
                  Ответить
              • Объект Random в Java полезно иметь и в однопоточной программе. Ради nextInt и подобных.
                Ответить
        • да нет. генерация псевдослучайных последовательностей чиста из-за аппаратных ограничений.

          где хранить сид - вопрос религии.
          Ответить
        • > даже в Haskell есть "грязь" - в монадах

          Не есть, а возможна, если правильно понимаю, то грязная лишь IO, или покажите impurity в, скажем, Маybe.
          Ответить
          • О, единомышленники. Да, вы абсолютно правы, я был неточен: изменение "состояния мира" происходит только через монаду IO. [], Maybe, Either, etc. чисты и представляют другие аспекты, монады сами по себе не означают "грязь". Просто не видел смысла указывать на такие подробности.
            Ответить
            • > единомышленники
              у вас только одна мышь?
              Ответить
              • [marazm]А вы фигачите на компе двумя мышами, типа мультитач?[/marazm]
                Ответить
                • когда-то давно эта идея витала, только никакой не ататат мультитач, а дополнительные две степени свободы в CAD
                  Ответить
      • Это аргумент против C. C++ предлагает несколько стандартных ГПСЧ — на широкий вкус.
        Ответить

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