Le costanti

Come nel Turbo Pascal , il Free Pascal supporta sia le costanti normali che quelle tipizzate.

-

Le costanti Ordinarie

La dischiarazione delle costanti ordinarie non è differente dal Turbo Pascal o dal Delphi.
Il compilatore deve essere in grado di valutare l'espressione di una dichiarazione di costante nel momento della compilazione.
Questo significa che molte delle funzioni della libreria di Run-Time non possono essere utilizzate in una dichiarazione di costante.
Gli operatori come :
  +,-,*,/,not,and,or,div,mod,ord,chr,sizeof,pi,int,trunc, round,frac,odd
possono comunque essere utilizzati.
Possono essere dichiarate costanti solo dei seguenti tipi :
Ordinal,Real,Char,String.

Le seguenti sono dichiarazioni valide :

Const
    e = 2.32122546; { Costante Real}
    a = 2; {Costante Ordinal (integer)}
    c = '4'; {Costante Char}
    s = 'Costante Stringa'; { Costante String}
    s = chr(32);
    ls = SizeOf(Longint);

L'assegnazione di un valore ad una costante ordinaria non è permesso.
Quindi , date le precedenti dichiarazioni , la seguente darà come risultato un'errore di compilazione.

s := 'qualche altra stringa';

-

Le costanti tipizzate

Le costanti tipizzate servono a fornire un programma con delle variabili già inizializzate.
La differenza rispetto ad una variabile normale è che il suo valore è già inizializzato quando il programma viene avviato , invece una variabile normale deve essere inizializzata esplicitamente.

Data la dichiarazione :

Const
    S : String = 'Questa è una costante tipizzata';

La seguente è un'assegnazione valida :

    S := 'Risultato : '+Func;

Dove Func è una funzione che restituisce una Stringa.
Le costanti tipizzate sono spesso utilizzate per inizializzare gli array e i Records.
Per gli array , gli elementi iniziali devono essere specificati , racchiusi tra parentesi tonde , e separati da virgole.
Il numero degli elementi deve essere esattamente lo stesso del numero di elementi dichiarati.
Un'esempio :

Const
    tt : array [1..3] of string[20] = ('aaa','bbb', 'ccc');
    tt : array [1..3] of Longint = (1,2,3);

E ora un'esempio con i Records :

Type
    Point = record;
      X,Y : Real;
    end;

Const
    Origin : Point = (X:0.0; Y=0.0);

L'ordine dei campi in una costante di record deve essere lo stesso della dichiarazione , altrimenti verrà generato un errore di compilazione.

-

Le Resource Strings

Un sezione speciale per la dichiarazione delle costanti è la sezione delle Resourcestring.
Questa sezione è simile ad una sezione Const , ma permette di dichiarare solo costanti del tipo string.
è possibile utilizzare questa sezione solamente in modalità Delphi oppure objfpc.
Il seguente è un'esempio :

Resourcestring

    FileMenu = '&File...';
    EditMenu = '&Edit...';

Tutte le costanti di tipo stringa definite in questa sezione sono memorizzate in tabelle speciali , permettendo di manipolarne il valore a RunTime per mezzo di alcuni speciali meccanismi.
Semanticamente , le stringhe sono come costanti.
Non è possibile assegnare dei valori ad esse , fatta eccezione di utilizzare gli speciali meccanismi messi a disposizione nella Unit objpas.
Uno degli utilizzi più frequenti delle resourcestring è quello di mettere a disposizione un metodo semplice per l'iternazionalizzazione (traduzione) dei programmi.

-