Uma Unit é uma coleção de constantes, tipos de dados, variáveis, procedimentos e funções. Cada Unit é como um programa Pascal separado. Ela é uma biblioteca de declarações que permite dividir seu programa e compilá-lo em partes separadas. Ela pode ter um corpo principal o qual é chamado antes do seu programa ser iniciado para preparar as "inicializações" necessárias.
Todas as declarações em uma Unit estão normalmente relacionadas. Por exemplo, a unit CRT contém todas as declarações de rotinas relativas à SCREEN do PC. O Turbo Pascal possui 8 Units pré-definidas: System, Overlay, Graph, Dos, Crt, Printer...
UNIT <identificador>; {arquivo deve ter mesmo nome.PAS} INTERFACE uses <lista de units> {opcional} <declarações públicas> {só cabeçalho} IMPLEMENTATION uses <lista de units> {opcional} <declarações privadas> <implementação de proc. e funções> {corpo das funções e proc.} Begin <inicializações> End. {ou} End.
OBS: Um único arquivo (diferente do Módula-2)
Exemplo 1: Unit IntLib
Contém duas rotinas simples atuando sobre os inteiros
Unit IntLib; { INTLIB.PAS } Interface Procedure ISwap (var I,J: integer); Function IMax (I,J: integer): integer; Implementation Procedure ISwap (var I,J: integer); Var Temp: integer; Begin Temp:=I; I:=J; J:=Temp; End; Function IMax (I,J: integer): integer; Begin If I>J Then IMax:=I Else IMax:=J; End; End.
O programa abaixo, localizado em outro arquivo, utiliza esta unit.
Program Test; Uses IntLib; Var A,B: integer; Begin Write('Dê dois inteiros:'); Readln(A,B); ISwap(A,B); Writeln('A=',A, 'B=',B); Writeln('Máx=', Imax(A,B)); End.
Exemplo 2: Unit circulares - Units podem "utilizar" outras Units estabelecendo referências "circulares".
Program Circular: usa Unit Display (definida pelo usuário) para imprimir 3 mensagens na tela em coordenadas dadas.
Program Circular; Uses Crt, Display; Begin Clrscr; WriteXY(1,1,'upper left corner of screen'); WriteXY(100, 100, 'Way off the screen'); WriteXY(81-Length('Back to reality'), 15-Length('Back to reality'), 'Message'); End.
Unit Display:
Unit Display; Interface Procedure WriteXY(X,Y: integer; Message: string); Implementation Uses Crt, Error; Procedure WriteXY(X,Y: integer; Message: string); Begin If (X in [1..80]) and (Y in [1..25]) Then Begin GotoXY(X,Y); Write(Message); End Else ShowError('Coordenadas X e Y são inválidas'); End; End.
Unit Error:
Unit Error; Interface Procedure ShowError (ErrMsg: string); Implementation Uses Display; Procedure ShowError(ErrMsg:string); Begin WriteXY(1,25,'Error: '+ ErrMsg); End; End.