FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Declareing locals
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Declareing locals
Posted: Wed May 01, 2019 04:21 PM

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

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Declareing locals
Posted: Wed May 01, 2019 05:24 PM

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

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Declareing locals
Posted: Wed May 01, 2019 05:35 PM

Hello Enrico,
Thank you.
But what are the advantages and disadvantages of these two.
With kind regards
Otto

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Declareing locals
Posted: Wed May 01, 2019 06:00 PM

local aTemp := {}

is equivalent to

local aTemp
aTemp = {}

The advantage is that the first form is more compact, I presume.

EMG

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Declareing locals
Posted: Wed May 01, 2019 06:54 PM

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

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Declareing locals
Posted: Wed May 01, 2019 07:11 PM

Teoretically, yes. But I doubt it would make any visible difference in real programs.

EMG

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Declareing locals
Posted: Wed May 01, 2019 07:20 PM
Mr. Otto,

Testing:

Code (fw): Select all Collapse
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
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Declareing locals
Posted: Wed May 01, 2019 07:24 PM

This is NOT a real program, it is a sample. Anyway, it shows two identical values here.

EMG

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Declareing locals
Posted: Wed May 01, 2019 09:17 PM
Hello and thank you for your help.

I tested with these changes and see a difference in speed.

Code (fw): Select all Collapse
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
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Declareing locals
Posted: Thu May 02, 2019 07:37 AM

Mr. Otto,

Try first call to Local2() and after call to Local1()

Regards

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Declareing locals
Posted: Thu May 02, 2019 12:33 PM

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

Continue the discussion