Declareing locals

Declareing locals

Postby Otto » Wed May 01, 2019 4: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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6346
Joined: Fri Oct 07, 2005 7:07 pm

Re: Declareing locals

Postby Enrico Maria Giordano » Wed May 01, 2019 5: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
User avatar
Enrico Maria Giordano
 
Posts: 8719
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Declareing locals

Postby Otto » Wed May 01, 2019 5:35 pm

Hello Enrico,
Thank you.
But what are the advantages and disadvantages of these two.
With kind regards
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6346
Joined: Fri Oct 07, 2005 7:07 pm

Re: Declareing locals

Postby Enrico Maria Giordano » Wed May 01, 2019 6:00 pm

local aTemp := {}

is equivalent to

local aTemp
aTemp = {}

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

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8719
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Declareing locals

Postby Otto » Wed May 01, 2019 6: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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6346
Joined: Fri Oct 07, 2005 7:07 pm

Re: Declareing locals

Postby Enrico Maria Giordano » Wed May 01, 2019 7:11 pm

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

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8719
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Declareing locals

Postby hmpaquito » Wed May 01, 2019 7:20 pm

Mr. Otto,

Testing:

Code: Select all  Expand view  RUN
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

 
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Declareing locals

Postby Enrico Maria Giordano » Wed May 01, 2019 7:24 pm

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

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8719
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Declareing locals

Postby Otto » Wed May 01, 2019 9:17 pm

Hello and thank you for your help.

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

Code: Select all  Expand view  RUN

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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6346
Joined: Fri Oct 07, 2005 7:07 pm

Re: Declareing locals

Postby hmpaquito » Thu May 02, 2019 7:37 am

Mr. Otto,

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

Regards
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Declareing locals

Postby Otto » 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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club
********************************************************************
User avatar
Otto
 
Posts: 6346
Joined: Fri Oct 07, 2005 7:07 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests