- 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);
}
KirAmp 10.11.2010 18:58 # +4
Oleg_quadro 10.11.2010 23:11 # 0
Допустим, надо сравнить версию 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 автор не я))
KirAmp 10.11.2010 23:43 # +2
Автор кода не знал про оператор || и не определил тип функции. Больше косяков не видю)
Oleg_quadro 10.11.2010 23:59 # +1
В функции проверки нарезать строки версий по точкам в массивчики.
Ну и пробегаться по массивчикам, сравнивая попарно элементы.
Если какой-то массивчик слишком рано закончился, то считать недостающие элементы нулями.
Тогда спокойно можно будет сравнить версии с разным числом точек,
и само собой будет поддержка новых разрядов.
===
но в, принципе, если не желания делать универсально, автору можно оставить этот код.
babaika 11.11.2010 01:44 # −2
trace ("1.2.3" > "1.2.2");
Oleg_quadro 11.11.2010 02:28 # +4
trace("1.10.3" < "1.2.4");
babaika 11.11.2010 11:40 # 0
Oleg_quadro 11.11.2010 00:05 # 0
Если не совпала очередная пара, то следующие пары мы вообще не смотрим.
KirAmp 11.11.2010 13:08 # 0
if (version.nl < required.nl || version.n2 < required.n2) return false;
ReallyBugMeNot 11.11.2010 13:38 # +2
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" тоже строка и типа тоже версия.
FIZZER 10.11.2010 20:17 # +3
Lure Of Chaos 10.11.2010 21:37 # +4
psina-from-ua 10.11.2010 21:48 # 0
KirAmp 10.11.2010 22:33 # 0
Lure Of Chaos 10.11.2010 22:42 # +2
j0kz 10.11.2010 23:17 # −4
Lure Of Chaos 11.11.2010 00:25 # 0
j0kz 11.11.2010 00:28 # 0
Oleg_quadro 11.11.2010 00:32 # 0
http://govnokod.ru/4580#comment52050
j0kz 11.11.2010 00:54 # 0
Oleg_quadro 11.11.2010 00:54 # 0
и само собой будет поддержка новых разрядов."
Здесь, что же будет если n3 есть null?
Что надо делать если надо поддержать 5 разряд? заводить новое поле n5, и менять код функции?
j0kz 11.11.2010 01:19 # 0
если конечно не подразумевается вывод версии для пользователя.
bugmenot 11.11.2010 12:01 # 0
KirAmp 11.11.2010 13:10 # 0
bugmenot 11.11.2010 14:27 # 0
Oleg_quadro 11.11.2010 14:55 # 0
bugmenot 11.11.2010 15:33 # 0