Page 1 of 1
Declareing locals
Posted: Wed May 01, 2019 4:21 pm
by Otto
Hello,
what is the right way to declare locals.
Should we assign a value directly when declaring a local.
For example:
Function test
local aTemp := {}
or is local aTemp enough.
Can someone please explain the difference.
Thank you in advance and best regards
Otto
Re: Declareing locals
Posted: Wed May 01, 2019 5:24 pm
by Enrico Maria Giordano
This is a simple declaration:
local aTemp
while this other is a declaration with initialization:
local aTemp := {}
In the simple declaration the value of aTemp is NIL. After the initialization the type of aTemp is array and its value is an empty array.
EMG
Re: Declareing locals
Posted: Wed May 01, 2019 5:35 pm
by Otto
Hello Enrico,
Thank you.
But what are the advantages and disadvantages of these two.
With kind regards
Otto
Re: Declareing locals
Posted: Wed May 01, 2019 6:00 pm
by Enrico Maria Giordano
local aTemp := {}
is equivalent to
local aTemp
aTemp = {}
The advantage is that the first form is more compact, I presume.
EMG
Re: Declareing locals
Posted: Wed May 01, 2019 6:54 pm
by Otto
Hello Enrico,
I read that declaration with initialization should be 3%-40% more speedy in executing the program.
Could this be?
Thank you in advance
Otto
Re: Declareing locals
Posted: Wed May 01, 2019 7:11 pm
by Enrico Maria Giordano
Teoretically, yes. But I doubt it would make any visible difference in real programs.
EMG
Re: Declareing locals
Posted: Wed May 01, 2019 7:20 pm
by hmpaquito
Mr. Otto,
Testing:
Code: Select all
FUNCTION Main()
Local nI
Local nMax:= 1000000
Local nSec1, nSec2
Local cSec1, cSec2
nSec1:= Seconds()
FOR nI:= 1 TO nMax
Local1()
NEXT
cSec1:= Str(Seconds()- nSec1, 10, 5)
nSec2:= Seconds()
FOR nI:= 1 TO nMax
Local2()
NEXT
cSec2:= Str(Seconds()- nSec2, 10, 5)
MsgInfo("Mode 1: "+ cSec1+ Chr(13)+ Chr(13)+;
"Mode 2:"+ cSec2, "Results")
RETURN NIL
STATIC FUNCTION Local1()
Local a:= {}
RETURN NIL
STATIC FUNCTION Local2()
Local a
a:= {}
RETURN NIL
Re: Declareing locals
Posted: Wed May 01, 2019 7:24 pm
by Enrico Maria Giordano
This is NOT a real program, it is a sample. Anyway, it shows two identical values here.
EMG
Re: Declareing locals
Posted: Wed May 01, 2019 9:17 pm
by Otto
Hello and thank you for your help.
I tested with these changes and see a difference in speed.
Code: Select all
RETURN NIL
Local nMax:= 10000000
STATIC FUNCTION Local1()
Local a:= {}
Local b:= {}
Local c:= {}
Local d:= {}
Local e:= {}
Local c1:= ""
Local c2:= ""
Local c3:= ""
Local c4:= ""
Local c5:= ""
Not much but there is a difference.
Best regards
Otto
Re: Declareing locals
Posted: Thu May 02, 2019 7:37 am
by hmpaquito
Mr. Otto,
Try first call to Local2() and after call to Local1()
Regards
Re: Declareing locals
Posted: Thu May 02, 2019 12:33 pm
by Otto
Hello,
I did this yesterday and the results are the same. Declaration with initialization seams faster.
Enrico is right that in a real world program you would not see any differences.
In the same source I read that there is also speed differences between passing values by reference or value.
Best regards
Otto