1. ActionScript / Говнокод #4580

    −155

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    function requiredVersion(required) 
    { 
      version = getVersionNumber();
      if (version.nl < required.nl) return(false);
      if (version.nl > required.nl) return(true);
      if (version.n2 < required.n2) return (false);
      if (version.n2 > required.n2) return (true);
      if (version.n3 < required.n3) return (false); 
      if (version.n3 > required.n3) return (true);
      if (version.n4 < required.n4) return (false); 
      if (version.n4 >= required.n4) return (true);
    }

    Запостил: psina-from-ua, 10 Ноября 2010

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

    • Что-то какой-то бред, ибо нехера не пойму применение этого гк
      Ответить
      • Сравнение версий.
        Допустим, надо сравнить версию 1.2.3.4 с 1.3.4.5

        Версия 1.2.3.4 записывается так:
        version.n1 = 1;
        version.n2 = 2;
        version.n3 = 3;
        version.n4 = 4;

        Версия 1.3.4.5 записывается так:
        required.n1 = 1;
        required.n2 = 3;
        required.n3 = 4;
        required.n4 = 5;

        Ну и начинаем последовательно сравнивать числа (то есть поля n1, n2 ...).
        Если на определенном этапе числа не совпали, даем тру или фолс.
        Если совпали -- идём дальше.

        P.S автор не я))
        Ответить
        • А не такой уж и ГК получается)..

          Автор кода не знал про оператор || и не определил тип функции. Больше косяков не видю)
          Ответить
          • Если по-хорошему, то версии нужно хранить в строках ('1.2.3.4')
            В функции проверки нарезать строки версий по точкам в массивчики.

            Ну и пробегаться по массивчикам, сравнивая попарно элементы.

            Если какой-то массивчик слишком рано закончился, то считать недостающие элементы нулями.

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

            ===
            но в, принципе, если не желания делать универсально, автору можно оставить этот код.
            Ответить
          • А как тут || помогло бы?
            Если не совпала очередная пара, то следующие пары мы вообще не смотрим.
            Ответить
            • Можно было-бы написать в этом духе:
              if (version.nl < required.nl || version.n2 < required.n2) return false;
              Ответить
              • Бред!
                2.0 < 1.1?
                Кстати, если мне не изменяет память, из-за вот таких ламерских проверок когда-то в винде то ли 95 то ли 98 minor версию в defin'ах SDK сделали 95 (98). Ибо иначе она (4.0) по мнению многих программ оказывалась младше, чем древняя 3.11.
                Правильное условие
                if ((version.n1 < required.n1) || (((version.n1 == required.n1) && (version.n2 < required.n2)) return false;
                Но для 4 компонент условие получится слишком монструозное.

                По-моему, данные код вполне нормальный, он вполне соответствует своей задаче и весьма понятный. Например, хранение версии в строке убивает контроль типов ибо "this is a wrong version" тоже строка и типа тоже версия.
                Ответить
    • Все руки за такое надо повырывать.
      Ответить
    • Это, кстати, пример из книги "Macromedia Flash MX. Создание игр с помощью ActionScript"
      Ответить
    • напишите ваш вариант в двух словах пжл
      Ответить
      • и сложить слово СЧАСТЬЕ из букв А О П Ж
        Ответить
        • правда интересно. я бы точно также сравнивал, только по-другому алгоритм бы написал
          Ответить
          • Я предложил своё решение.
            http://govnokod.ru/4580#comment52050
            Ответить
            • ну так смысл тотже. все гавно только в написании?
              Ответить
              • "Тогда спокойно можно будет сравнить версии с разным числом точек,
                и само собой будет поддержка новых разрядов."

                Здесь, что же будет если n3 есть null?
                Что надо делать если надо поддержать 5 разряд? заводить новое поле n5, и менять код функции?
                Ответить
                • ну какбе нет. достаточно версию писать в одном формате, где n3 будет 0, а не NULL.

                  если конечно не подразумевается вывод версии для пользователя.
                  Ответить
    • А на хрена поле build в ActionScript`е?
      Ответить

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