- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 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);
}
Допустим, надо сравнить версию 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 автор не я))
Автор кода не знал про оператор || и не определил тип функции. Больше косяков не видю)
В функции проверки нарезать строки версий по точкам в массивчики.
Ну и пробегаться по массивчикам, сравнивая попарно элементы.
Если какой-то массивчик слишком рано закончился, то считать недостающие элементы нулями.
Тогда спокойно можно будет сравнить версии с разным числом точек,
и само собой будет поддержка новых разрядов.
===
но в, принципе, если не желания делать универсально, автору можно оставить этот код.
trace ("1.2.3" > "1.2.2");
trace("1.10.3" < "1.2.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" тоже строка и типа тоже версия.
http://govnokod.ru/4580#comment52050
и само собой будет поддержка новых разрядов."
Здесь, что же будет если n3 есть null?
Что надо делать если надо поддержать 5 разряд? заводить новое поле n5, и менять код функции?
если конечно не подразумевается вывод версии для пользователя.