powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как лучше прописать условие
5 сообщений из 5, страница 1 из 1
как лучше прописать условие
    #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
как лучше прописать условие
    #38781734
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затести скорость. Думаю второй или третий.
Только второй надо писать чуть по другому, чтобы '0' не находил
Код: sql
1.
IF ',' + m.lcPerem + ',' $ ',01,02,04,05,' 


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

Нет 0 не найдет, т.к. я заранее знаю что переменная lcPerem двухсимвольная.
В основном использую второй вариант (проще и быстрее писать), хотя конечно надо бы потестить скорость.
...
Рейтинг: 0 / 0
как лучше прописать условие
    #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
как лучше прописать условие
    #38781851
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все верно, значит второй быстрее всего.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как лучше прописать условие
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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