Una Unidad agrupa declaraciones compartidas de tipos, funciones, procedimientos, constantes y variables para ser invocada por otras unidades o el programa principal, equivalente a los módulos / paquetes de otros lenguajes de programación.
Crear una unidad
La unidad se divide en dos bloques principales:
Zona interface (interfaz): Contenido expuesto al exterior, accesible directamente tras importarse desde otros archivos;
Zona implementation (implementación): Código privado interno, solo visible para la unidad actual y no invocable desde fuera.
Ejemplo
Crea un archivo llamado MyUnit.pas para alojar una unidad.
unit MyUnit;
{$ifdef FPC}
{$mode objfpc}{$H+}{$J-}
{$endif}
// Zona de interfaz: declaraciones públicas
interface
procedure MyProcedure(const A: Integer);
function MyFunction(const S: string): string;
// Zona de implementación: código privado
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.Lenguaje del código: JavaScript (javascript)

Los lectores atentos notarán que el end. final no tiene un begin correspondiente.
La estructura sintáctica de una
unit(unidad) de Pascal es distinta a la de unprogram(programa)
programPrograma principal: requiere el bloquebegin ... end.como punto de entrada de ejecución
unitUnidad: no requiere un begin globalToda unidad finaliza con
end.(el punto indica el fin del archivo, sin un begin global asociado)
- Dentro de
interfacese escriben prototipos de funciones/procedimientos, tipos, constantes y variables globales; otros archivos pueden llamarlos tras usar la sentenciauses; - En
implementationsolo va la implementación completa de las funciones; los procedimientos locales y variables privadas definidos aquí son invisibles para otras unidades; - Los archivos de unidad empiezan con
unit Nombre;y terminan conend..
Importar unidades en el programa principal
Nuestro archivo de programa principal es mydemo.pas
Carga unidades personalizadas con la palabra clave uses
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
// Importar la unidad personalizada MyUnit
uses
MyUnit;
begin
WriteLn(MyFunction('Note: '));
MyProcedure(5);
ReadLn;
end.Lenguaje del código: PHP (php)
El MyUnit; debajo de uses hace referencia al nombre de la unidad, no al nombre del archivo .pas.
Se trata del nombre definido en la primera línea de MyUnit.pas: unit MyUnit;
Aunque el nombre del archivo y el nombre de la unidad pueden ser diferentes, se recomienda que coincidan. Si difieren, en uses siempre se usa el nombre de la unidad, no el del archivo.

Ahora compila y ejecuta; el programa principal invocará las funciones de la unidad.

Ahora compila y ejecuta

Tras la compilación, aparecerán dos archivos nuevos en el directorio del proyecto

.ppu (Pascal Unit File, archivo de metadatos de compilación de unidad)
Solo se genera al compilar archivos de tipo unit; el programa principal program no crea archivos .ppu
- Almacena los metadatos compilados de la zona
interfacede la unidad: prototipos de funciones, tipos, constantes, símbolos exportados; - Cuando otros archivos usan
uses MyUnit, el compilador no vuelve a analizar todo el código fuente de MyUnit.pas, lee directamente el archivo .ppu para validar la interfaz rápidamente; - Acelera notablemente la compilación en proyectos grandes; es el archivo central de la compilación incremental de FPC.
MyUnit.o: Instrucciones binarias en lenguaje máquina generadas al compilar MyUnit.pas (todo el código de la zona implementation)
mydemo.o: Código máquina binario del programa principal mydemo.pas
El compilador traduce primero cada archivo .pas a archivos objeto binarios independientes .o; luego el enlazador fusiona todos los archivos .o para generar el ejecutable .exe.