A Unidade (Unit) agrupa declarações compartilhadas de tipos, funções, procedimentos, constantes e variáveis para serem invocadas por outras unidades ou pelo programa principal, equivalente aos módulos / pacotes de outras linguagens de programação.
Criar uma unidade
A unidade é dividida em duas seções centrais:
Seção interface (interface): Conteúdo exposto externamente, acessível diretamente após ser importado por outros arquivos;
Seção implementation (implementação): Código privado interno, visível apenas na unidade atual e impossível de ser invocado externamente.
Exemplo
Crie um arquivo chamado MyUnit.pas para implementar uma unidade.
unit MyUnit;
{$ifdef FPC}
{$mode objfpc}{$H+}{$J-}
{$endif}
// Seção de interface: declarações públicas
interface
procedure MyProcedure(const A: Integer);
function MyFunction(const S: string): string;
// Seção de implementação: 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.Code language: JavaScript (javascript)

Leitores atentos perceberão que o end. no final não tem um begin correspondente?
A estrutura sintática de uma
unit(unidade) Pascal é diferente da estrutura de umprogram(programa)
programPrograma principal: é obrigatório ter o blocobegin ... end.como ponto de entrada de execução
unitUnidade: não precisa de um begin globalToda unidade termina com
end.(o ponto marca o fim do arquivo, sem um begin global correspondente)
- Dentro de
interfacesão declarados protótipos de funções/procedimentos, tipos, constantes e variáveis globais; arquivos externos conseguem chamá-los após usarem a diretivauses; - Em
implementationfica apenas a implementação completa das funções; procedimentos locais e variáveis privadas definidos aqui não são visíveis para outras unidades; - Arquivos de unidade iniciam com
unit Nome;e terminam comend..
Importar unidades no programa principal
Nosso arquivo de programa principal é o mydemo.pas
Carregue unidades personalizadas com a palavra-chave uses
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
// Importar a unidade personalizada MyUnit
uses
MyUnit;
begin
WriteLn(MyFunction('Note: '));
MyProcedure(5);
ReadLn;
end.Code language: PHP (php)
O MyUnit; abaixo de uses é o nome da unidade, não o nome do arquivo .pas.
Esse nome é o definido na primeira linha do MyUnit.pas: unit MyUnit;
Apesar de ser possível deixar o nome do arquivo diferente do nome da unidade, é recomendável mantê-los iguais. Se forem diferentes, o comando uses sempre usa o nome da unidade, não o nome do arquivo.

Agora compile e execute; o programa principal chamará as funções da unidade.

Agora compile e execute

Após a compilação, dois novos arquivos aparecerão na pasta do projeto

.ppu (Pascal Unit File, arquivo de metadados de compilação da unidade)
Só é gerado ao compilar arquivos do tipo unit; o programa principal program não cria arquivos .ppu
- Armazena os metadados compilados da seção
interfaceda unidade: protótipos de funções, tipos, constantes, símbolos exportados; - Quando outros arquivos executam
uses MyUnit, o compilador não reanalisa todo o código-fonte do MyUnit.pas, lê diretamente o arquivo .ppu para validar a interface rapidamente; - Aumenta drasticamente a velocidade de compilação em projetos grandes; é o arquivo principal da compilação incremental do FPC.
MyUnit.o: Instruções binárias de máquina compiladas do MyUnit.pas (todo o código da seção implementation)
mydemo.o: Código de máquina binário do programa principal mydemo.pas
O compilador converte cada arquivo .pas em arquivos objeto binários independentes .o; depois o ligador mescla todos os arquivos .o para gerar o executável .exe.