Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как лучше прописать условие / 5 сообщений из 5, страница 1 из 1
20.10.2014, 12:59
    #38781717
Jura.K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше прописать условие
Добрый день участникам форума.
Возник такой вопрос как лучше писать условие
Вариант 1
Код: plsql
1.
IF m.lcPerem = '01' OR m.lcPerem = '02'  OR m.lcPerem = '04' OR m.lcPerem = '05'  


Вариант 2
Код: plsql
1.
IF m.lcPerem $ '01,02,04,05' 


Вариант 3
Код: plsql
1.
IF INLIST(m.lcPerem, '01','02','04','05') 


Какой из этих трех вариантов более правильный с точки зрения фокса?
Какой из этих трех вариантов самый быстрый?
...
Рейтинг: 0 / 0
20.10.2014, 13:07
    #38781734
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше прописать условие
Затести скорость. Думаю второй или третий.
Только второй надо писать чуть по другому, чтобы '0' не находил
Код: sql
1.
IF ',' + m.lcPerem + ',' $ ',01,02,04,05,' 


Лично я бы inlist() использовал. Код понятнее.
...
Рейтинг: 0 / 0
20.10.2014, 13:31
    #38781771
Jura.K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше прописать условие
Dima T,

Нет 0 не найдет, т.к. я заранее знаю что переменная lcPerem двухсимвольная.
В основном использую второй вариант (проще и быстрее писать), хотя конечно надо бы потестить скорость.
...
Рейтинг: 0 / 0
20.10.2014, 14:03
    #38781818
Jura.K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше прописать условие
Итак потестировал. Для чего был сооружен следующий код

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
LOCAL lcPerem, lcSeconds1, lcSeconds11, lcSeconds2, lcSeconds21, lcSeconds3, lcSeconds31
CLEAR 
? 'Значение переменной' 
?? SPACE(7)+'Вариант 1'
?? SPACE(7)+'Вариант 2'
?? SPACE(7)+'Вариант 3'
? REPLICATE('-',100)
FOR J=1 TO 5
	lcPerem=PADL(j,2,'0')
	
	lcSeconds1=SECONDS()
	FOR i=1 TO 1000000
		IF m.lcPerem = '01' OR m.lcPerem = '02'  OR m.lcPerem = '04' OR m.lcPerem = '05'  
		ENDIF 
	ENDFOR 
	lcSeconds11=SECONDS()
	 
	lcSeconds2=SECONDS()
	FOR i=1 TO 1000000
		IF m.lcPerem $ '01,02,04,05' 
		ENDIF 
	ENDFOR 
	lcSeconds21=SECONDS()


	lcSeconds3=SECONDS()
	FOR i=1 TO 1000000
		IF INLIST(m.lcPerem, '01','02','04','05') 
		ENDIF 
	ENDFOR 
	lcSeconds31=SECONDS()

? SPACE(25)+m.lcPerem
?? lcSeconds11-lcSeconds1
?? lcSeconds21-lcSeconds2
?? lcSeconds31-lcSeconds3
? REPLICATE('-',100)

ENDFOR 		



Результат такой
Значение переменной Вариант 1 Вариант 2 Вариант 3 01 0.221 0.210 0.291 02 0.352 0.228 0.325 03 0.531 0.235 0.359 04 0.463 0.253 0.361 05 0.571 0.271 0.400

Из чего делаем вывод что второй вариант самый быстрый.
Может я ошибаюсь ?
И меня поправят ?
...
Рейтинг: 0 / 0
20.10.2014, 14:27
    #38781851
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как лучше прописать условие
Все верно, значит второй быстрее всего.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как лучше прописать условие / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]