Declareing locals

Post Reply
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Declareing locals

Post 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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

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

Re: Declareing locals

Post 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
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Declareing locals

Post by Otto »

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

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

Re: Declareing locals

Post 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
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Declareing locals

Post 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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

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

Re: Declareing locals

Post by Enrico Maria Giordano »

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

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

Re: Declareing locals

Post 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

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

Re: Declareing locals

Post by Enrico Maria Giordano »

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

EMG
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Declareing locals

Post 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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

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

Re: Declareing locals

Post by hmpaquito »

Mr. Otto,

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

Regards
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Declareing locals

Post 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
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

********************************************************************
Post Reply