Languages Focus: Variables
A variable holds a value that you can use and change throughout your code so long as the variable is within scope. With variable declaration, you not only want to know the syntax of how you declare a variable but you also want to know where. Are you allowed to declare a variable inline? What are the available scopes: local vs. global. Can you assign a value at the same time you declare a variable?
The Delphi language is a strongly typed language so you have to specifically declare variables and frequently use commands such as IntToStr and StrToInt.
Declare global variables in the interface section of a unit, variables declared within the implementation section (but not within a method) have a scope limited to the unit. You declare local variables in a var block outside (above) your begin..end code block. You cannot declare variables in-line (inside begin..end).
You can initialize global and unit variables but you cannot initialize local variables.
Delphi offers many variable types. Some common variable types include String, WideString, PChar, Integer, Boolean, Single, Double, Pointer, and Variant.
Note: D2009 introduced a new UnicodeString type.
X, Y, Z: Double;
MyArray: array [1..100] of Char;
//You can initialize global variables.
ClickCounter: Integer = 0;
Interface versus Implementation
Variables declared in the interface section of a unit are truly global and you should limit the number of variables you declare in the interface section especially for reusable units (units that contain classes). Variables declared in the implementation section of a unit have a scope limited to the unit.
Initializing Local Variables
You cannot initialize local variables. The following commented out code, does not work:
procedure TForm2.Button6Click(Sender: TObject);
// ButtonClicks: Integer = 0; //Does not work!
Initializing Global Variables
You can initialize global variables but not local variables. Suppose you wish to allow a user to click a button up to 3 times. You can initialize a global variable to track clicks.
The following code does work:
ClickCounter: Integer = 0; //Does work!
procedure TForm2.Button7Click(Sender: TObject);
If ButtonClicks >= 3 then
ShowMessage('Stop clicking the button.')
ButtonClicks := ButtonClicks + 1;
Form2.Caption := IntToStr(ButtonClicks);
Initialized Global Variables and Static Data: Initialized global variables are important for many reasons but I will discuss it's relation to static class data here. Static class data is data of a class that retains state (it's value) whether or not there is an instance of a class. Suppose you wish to have an instance counter. If no classes are currently created, the current value of your instance counter needs to be 0. For each class created, you add 1. For each destroyed, you subtract 1.