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