Variables and Values of Variables

Contractual, local, global, and static variables. Variables that can be used in subroutine and function procedures fall into four categories: Arguments that are passed to the procedure, local variables, global variables, and static variables.

Contractual variables. Contractual variables (or passed variables) are variables that are passed between functions and subroutines. The original variable will be local to the calling function, but it can be used in other functions that it is passed to. The degree of access that the receiving function has to the variable's value is determined by whether it was passed by value or by reference [see STATISTICA Visual Basic Syntax Reference - User-Defined Functions and Subroutines (Arguments)]. Refer to STATISTICA Visual Basic Syntax Reference - User-Defined Functions and Subroutines for further details about how to pass variables as arguments between procedures.

Local variables. All variables that are declared within a function or subroutine are local. Local means that the values of those variables are only accessible within the respective procedure, and no naming conflicts will arise if the same variable name is used in another procedure or the main program.

Declaring local variables. To create a variable that is specific to a function or subroutine, simply declare it within the body of the procedure (preferably at the top) as such:

Sub Main

Dim ReportName As String

End Main

Unless this variable is passed (either by value or by reference), no other procedure within your program may either view or manipulate it.

Note that once a function or subroutine ends, its local variables are deleted. Each time the procedure is called, it will create new instances of its local variables. If you wish for a function to retain its variables, then those variables must be declared as static.

Global variables. All variables or arrays that are defined in the Declaration section of a macro are global. Global means that the values of those variables can be accessed and changed inside any procedure, even though they were not passed as arguments.

Declaring global variables. To make other variables and arrays globally visible to the procedures that follow, declare them in the Declaration section of your macro using the Dim keyword. For example:

'Global integer holding the number of
'open reports in the application

Dim
gNumberOfReports As Integer

Sub
Main
End Sub

Any procedure within your program may access and manipulate this variable in the same manner that it accesses its own local variables.

Static variables. Static variables behave the same way as local variables (in that no other procedure may have access to them without passing them as arguments), except that they persist even after the function or subroutine has ended. The following demonstrates a function which internally keeps track of how many times it is called by utilizing a static variable:

Sub main
'Call the counting function five times

For
i = 1 To 5

Count

Next i
End Sub


Sub
Count

'Instead of using Dim to declare the variable,

'use the keyword Static

Static
HowManyTimesCalled As Integer

'Each time this function is called this

'variable will be incremented.

'Because it's static, this variable is

'"remembered" everytime the function is used

HowManyTimesCalled = HowManyTimesCalled + 1

MsgBox Str
(HowManyTimesCalled)

End Sub