SmartPascal
Const
Keyword
Starts the definition of fixed data values
1   Const
    Name1 = Expression1;
  {...}
2   Const
    Name1 Type = Expression1;
  {...}
3   Name (Const Const1 : type {;...});
Description
The Const keyword is used to start a section of constant definitions.
 
The section is terminated by the next keyword in a program.
 
Within the section, one or more constants may be defined. These can be a mixture of normal or typed constants:
 
1.Normal constants
 
These give a name Name1 to a fixed expression, Expression1. The expression must resolve into one of the following types:
 
Integer number
Floating point number
Character
String
Set
Enumerated value

 
2.Typed constants
 
These are very odd. They are constant only in the sense that their value persists all parts of a program. Yet it can be changed (as long as the compiler directive {WriteableConst} is set On).
 
They are used, for example, when a routine needs to hold values that are preserved across calls.
 
It is better to use Object Oriented principles to allow data to be preserved across accesses.
 
3.Constant routine parameters
 
When passing data to a routine (function or procedure), you can prefix the parameter definition with Const if the value is never updated. This marginally improves performance, clarifies routine operation, and prevents accidental updates of the value.
Related commands
Function Defines a subroutine that returns a value
Out Identifies a routine parameter for output only
Procedure Defines a subroutine that does not return a value
Type Defines a new category of variable or process
Var Starts the definition of a section of data variables
 
Example code : Illustrating the different constant types
Const
  MAX_LINES = 3;
  CRUDE_PI  = 22/7;
  HELLO     = 'Hello World';
  LETTERS   = ['A'..'Z', 'a'..'z'];
  DECISION  = True;

var
  i : Integer;

begin
  // Display our crude value of Pi
  ShowMessage('Crude Pi = '+FloatToStr(CRUDE_PI));

  // Say hello to the WOrld
  ShowMessage(HELLO);

  // Display MAX_LINES of data
  for i := 1 to MAX_LINES do
  begin
    // Do some checking - note that Char(i+64) = 'A'
    if DECISION and (Char(i+63) in LETTERS)
    then ShowMessage(Char(i+63)+' is a letter')
    else ShowMessage(Char(i+63)+' is not a letter');
  end;
end;
Show full unit code
   Crude Pi = 3.14285714285714
   Hello World
   @ is not a letter
   A is a letter
   B is a letter
 
Example code : Preserving a number value across calls to a routine
var
  i : Integer;

begin
  for i := 1 to 8 do
    ShowMessage('Number = '+IntToStr(GetNextNumber));
end;

// Get the next number from a given sequence
function TForm1.GetNextNumber: Integer;
type
  // Define a range of numbers returnable by this routine
  TNumbers = 0..5;

Const
  // A typed constant is really a persistent variable :
  // It's value is preserved across calls to this routine.
  {$WriteableConst On}
  nextNumber : TNumbers = 0;  // Start at the beginning

begin
  // Return the current value
  result := nextNumber;

  // Increment to the next value
  nextNumber := (nextNumber + 1) MOD 6;
end;
Show full unit code
   Number = 0
   Number = 1
   Number = 2
   Number = 3
   Number = 4
   Number = 5
   Number = 0
   Number = 1