Une unité (Unit) regroupe les déclarations partagées de types, fonctions, procédures, constantes et variables afin qu’elles puissent être appelées par d’autres unités ou le programme principal. Elle correspond aux modules / paquets des autres langages de programmation.
Créer une unité
Une unité est composée de deux blocs principaux :
Section interface : Contenu exposé publiquement, accessible directement après import par d’autres fichiers ;
Section implementation : Code privé interne, visible uniquement au sein de l’unité et inaccessible depuis l’extérieur.
Exemple
Créez un fichier nommé MyUnit.pas pour contenir une unité.
unit MyUnit;
{$ifdef FPC}
{$mode objfpc}{$H+}{$J-}
{$endif}
// Section interface : déclarations publiques
interface
procedure MyProcedure(const A: Integer);
function MyFunction(const S: string): string;
// Section implementation : code privé interne
implementation
procedure MyProcedure(const A: Integer);
begin
WriteLn('A + 10 is: ', A + 10);
end;
function MyFunction(const S: string): string;
begin
Result := S + 'strings are automatically managed';
end;
end.Langage du code : JavaScript (javascript)

Les lecteurs attentifs remarqueront que le marqueur final end. n’a pas de bloc begin correspondant.
La structure syntaxique d’une
unit(unité) Pascal diffère de celle d’unprogram(programme)
programProgramme principal : nécessite un blocbegin ... end.comme point d’entrée de l’exécution
unitUnité : aucun begin global n’est requisToute unité se termine par
end.(le point marque la fin du fichier, sans begin global associé)
- Dans
interface: prototypes de fonctions/procédures, types, constantes et variables globales ; ils peuvent être appelés par des fichiers externes après l’instructionuses; - Dans
implementation: seule l’implémentation complète des fonctions est écrite. Les procédures locales et variables privées définies ici restent invisibles aux autres unités ; - Les fichiers d’unité commencent par
unit Nom;et se terminent parend..
Importer une unité dans le programme principal
Notre fichier de programme principal est mydemo.pas
Chargez une unité personnalisée grâce au mot-clé uses
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
// Importer l’unité personnalisée MyUnit
uses
MyUnit;
begin
WriteLn(MyFunction('Note: '));
MyProcedure(5);
ReadLn;
end.Langage du code : PHP (php)
La ligne MyUnit; sous uses désigne le nom de l’unité, pas le nom du fichier .pas.
Il s’agit du nom indiqué sur la première ligne de MyUnit.pas : unit MyUnit;
Même si le nom du fichier peut différer du nom de l’unité, il est recommandé de les faire correspondre. En cas de divergence, l’instruction uses utilise toujours le nom de l’unité et non le nom du fichier.

Compilez et exécutez maintenant ; le programme principal appellera les fonctions de l’unité.

Compilez et exécutez maintenant

Après compilation, deux nouveaux fichiers apparaissent dans le dossier du projet

.ppu (Pascal Unit File, fichier de métadonnées de compilation d’unité)
Ce fichier n’est généré que lors de la compilation d’un fichier unité ; le programme principal program ne produit pas de fichier .ppu
- Stocke les métadonnées compilées de la section
interfacede l’unité : prototypes de fonctions, types, constantes, symboles exportés ; - Lorsque d’autres fichiers utilisent
uses MyUnit, le compilateur ne réanalyse pas l’intégralité du code source MyUnit.pas et lit directement le fichier .ppu pour valider rapidement l’interface ; - Accélère considérablement la compilation des grands projets ; c’est le fichier central de la compilation incrémentielle de FPC.
MyUnit.o : Instructions binaires machine compilées à partir de MyUnit.pas (l’intégralité du code de la section implementation)
mydemo.o : Code machine binaire du programme principal mydemo.pas
Le compilateur convertit d’abord chaque fichier .pas en fichiers objets binaires indépendants .o ; l’éditeur de liens fusionne ensuite tous les fichiers .o pour produire l’exécutable .exe.