Similaire aux espaces de noms de C++, Java et C#
Conflits d’identifiants homonymes
Plusieurs unités peuvent définir des types / fonctions / variables portant le même nom. Les unités placées plus tard dans la liste uses masquent les identifiants identiques des unités précédentes.
Syntaxe de qualification par unité
NomUnite.Identifiant précise explicitement l’unité source, impose l’utilisation des définitions de l’unité ciblée et résout les conflits de masquage.
Les deux segments uses agissent indépendamment l’un de l’autre
interface uses: ne s’applique qu’à la section interface ;implementation uses: ne s’applique qu’à la section implémentation. Les identifiants des unités de la section implémentation masquent ceux identiques des unités de la section interface.
Exemple
Créer une unité Graphics.pas
unit Graphics;
{$mode objfpc}{$H+}
interface
type
TColor = LongInt;
const
clYellow = 10;
function Red(C:TColor):Integer;
function Green(C:TColor):Integer;
function Blue(C:TColor):Integer;
implementation
function Red(C:TColor):Integer; begin Result:=C shr 16; end;
function Green(C:TColor):Integer; begin Result:=(C shr 8) and 255; end;
function Blue(C:TColor):Integer; begin Result:=C and 255; end;
end.Langage du code : JavaScript (javascript)
Créer ensuite une seconde unité GoogleMapsEngine.pas
unit GoogleMapsEngine;
{$mode objfpc}{$H+}
interface
type
TColor = string; // Type totalement différent de Graphics.TColor
implementation
end.Langage du code : PHP (php)
Nous disposons désormais de deux types TColor homonymes mais de structures différentes
Écrire ensuite le programme principal
program showcolor;
{$mode objfpc}{$H+}
{$apptype CONSOLE}
uses Graphics, GoogleMapsEngine;
var
// Color: TColor; // Erreur : résout GoogleMapsEngine.TColor (chaîne de caractères), plus tardif
Color: Graphics.TColor; // Correct, qualification explicite de l'unité
begin
Color := clYellow;
WriteLn(Red(Color), ' ', Green(Color), ' ', Blue(Color));
ReadLn;
end.Langage du code : PHP (php)

Compiler et exécuter

Si le préfixe Graphics. est omis, TColor pointe par défaut vers GoogleMapsEngine.TColor. Pourquoi ?
Le projet principal importe les unités via uses Graphics, GoogleMapsEngine;. GoogleMapsEngine étant déclaré en second, tout identifiant TColor dupliqué se résout par défaut sur l’unité la plus tardive : GoogleMapsEngine.TColor.
Pour les distinguer, écrire explicitement Graphics.TColor, à l’instar des espaces de noms, ce qui élimine tout conflit de nommage.
Exemple erroné
Une incompatibilité de type TColor entre la section interface et l’implémentation provoque une erreur de compilation
Créer une autre unité UnitUsingColors.pas
unit UnitUsingColors;
{$mode objfpc}{$H+}
interface
uses Graphics;
procedure ShowColor(const Color: TColor);
implementation
uses GoogleMapsEngine; // Le TColor de l'implémentation masque celui de l'interface
// Ici TColor désigne GoogleMapsEngine.TColor
procedure ShowColor(const Color: TColor);
begin
end;
end.Langage du code : JavaScript (javascript)
Référencer cette unité dans le projet principal mydemo.dpr
program showcolor;
{$mode objfpc}{$H+}
{$apptype CONSOLE}
uses UnitUsingColors;
begin
end.Langage du code : PHP (php)
Une simple référence suffit même sans appel de procédure ou fonction ; si rien n’est invoqué, le compilateur ignore la compilation de UnitUsingColors.pas.

Décomposition de l’erreur (point de vue du compilateur) :
// Signature de l'interface
procedure ShowColor(const Color: Graphics.TColor);
// Signature de l'implémentation
procedure ShowColor(const Color: GoogleMapsEngine.TColor);Langage du code : JavaScript (javascript)
Modifier le code comme ci-dessous
unit UnitUsingColors;
{$mode objfpc}{$H+}
interface
uses Graphics;
procedure ShowColor(const Color: TColor);
implementation
uses GoogleMapsEngine;
// Spécifier explicitement TColor issu de Graphics pour éviter le masquage du type homonyme
procedure ShowColor(const Color: Graphics.TColor);
begin
end;
end.Langage du code : JavaScript (javascript)

unit UnitUsingColors;
{$mode objfpc}{$H+}
interface
uses Graphics;
procedure ShowColor(const Color: TColor);
implementation
uses GoogleMapsEngine;
// Indiquer explicitement Graphics.TColor pour unifier le type
procedure ShowColor(const Color: Graphics.TColor);
begin
WriteLn(Red(Color), Green(Color), Blue(Color));
end;
end.Langage du code : JavaScript (javascript)
Résumé
Qualification par unité NomUnite.Identifiant permet de contrôler précisément l’origine des types sans modifier l’ordre des clauses uses et prévient tout conflit de nom.