Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Using == vs =
Message
De
06/11/2015 04:37:41
Walter Meester
HoogkarspelPays-Bas
 
 
À
06/11/2015 03:54:39
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows 10
Network:
Windows 2008 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01627149
Message ID:
01627156
Vues:
80
>>>>Just encountered a bug in our software releated to the use of = when set exact is set to off.
>>>>
>>>>I Know I should be using == in those cases where comparing strings of different lenght, but just a small test made me wonder.
>>>>
>>>>Is there any reason I should not use == for any comparison in VFP? It seems to work for any datatype.
>>>>
>>>>Is there any gotcha using == as a standard?
>>>>
>>>>
>>>>Walter,
>>>
>>>Not that I am aware of, I know people who do that all the time in order to differentiate assignments from comparisons.
>>
>>Which I find a good argument in itself. I just wonder why it has taken me more thaw 20 years to draw that conclusion.
>
>It's definitely safer to use == where you need to rely on an exact comparison.
>
>My understanding is == is a little slower than =, and there can be speed/Rushmore optimization issues with indexes e.g. if you have a column MyCharCol that is indexed, and you have WHERE MyCharCol == "SomeValue" ... in a SELECT, ISTR it's not fully optimizable.
>
>So, safer but a little slower.

I did not look into rushmore and to be honest I'm not that concerned about that one. I'm not dealing with VFP databases 99% of the time.
As for speed. It does not matter AFAICS. The following program does not give me any indication (after running it 10 times) that it is slower. In fact if there is a difference it seems to slightly faster (up to 5%).
CLEAR 
SET EXACT OFF

? "Non Equal values"

nVal1 = 1
nVal2 = 2

nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 = nVal2
ENDFOR

? "numeric using = ",SECONDS() - nSec

nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 == nVal2
ENDFOR

? "numeric using == ",SECONDS() - nSec


nVal1 = "MyVal1"
nVal2 = "MyVal2"

nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 == nVal2
ENDFOR
? "String using == ",SECONDS() - nSec



nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 = nVal2
ENDFOR
? "String using = ",SECONDS() - nSec


? "Equal values"

nVal1 = 1
nVal2 = 1

nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 = nVal2
ENDFOR

? "numeric using = ",SECONDS() - nSec

nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 == nVal2
ENDFOR

? "numeric using == ",SECONDS() - nSec


nVal1 = "MyVal1"
nVal2 = "MyVal1"

nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 == nVal2
ENDFOR
? "String using == ",SECONDS() - nSec



nSec = SECONDS()

FOR nT = 1 TO 1000000
	nRet = nVal1 = nVal2
ENDFOR
? "String using = ",SECONDS() - nSec
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform