Uma diretiva de compilação é um comentário com uma sintaxe especial, diferenciada, elas podem ser inseridas em qualquer lugar onde é permitido inserir comentários. Uma diretiva de compilação possui um $ logo após a abertura de chaves “{“ seguido do nome da diretiva e possivelmente de parâmetros, dependendo da diretiva.
Temos três tipos de diretivas de compilação:
- Switch Directives – São diretivas do tipo liga/desliga que possuem os valores On ou Off, que também podem ser definidos como + ou – no caso do uso de diretivas em seu formato curto.
- Parameter directives – Estas diretivas especificam parâmetros que afetam a compilação como por exemplo nomes de arquivos.
- Conditional directives – São diretivas que permitem que detemrinados blocos de código sejão compilados ou não, de acordo com a condição definida na diretiva.
Exemplo de uso de diretivas pelo Delphi:
{$R *.dfm}
Todo formulário que criamos vem com a diretiva acima em seu arquivo .pas. Esta diretiva indica que a o arquivo de resource que conterá os dados dos componentes em design time será um arquivo com mesmo nome da unit porém com a extensão dfm.
Diretivas DEFINE, IFDEF e IF
As diretivas de compilação condicional nos permitem determinar condições para compilação de determinados blocos de código. Isso é muito interessante em projetos legados quando temos um alto grau de acoplamento possuindo units que são compartilhadas entre projetos distintos.
No exemplo acima podemos observar que a diretiva DEFINE define uma confidional através de um nome, imediatamente abaixo verificamos a mesma através da diretiva IFDEF. Note que apenas o código referente à condição verdadeira foi compilado.
Poderíamos ainda trocar o {$ENDIF} e o {$IFDEF TESTE} por {$ELSE} caso quiséssemos que o segundo código fosse compilado caso a primeira condição fosse falsa:
Uma outra utilidade que temos de compilação condicional é quando precisamos verificar qual a versão do Delphi.
No exemplo acima podemos perceber que compilamos o nosso projeto no Delphi 2010, pois esta é a linha que está compilada.
Diretivas Hint e Message
A diretiva HINT nos permite habilitar e desabilitar os hints de compilação que o Delphi nos dá, quando por exemplo declaramos uma variável e não a utilizamos:
Temos também a diretiva MESSAGE que nos permite emitir hints, mensagens, erros de compilação.
{$MESSAGE 'Hint'}
{$Message Hint 'Outro hint'}
{$messaGe Warn 'Atenção com os finallys'}
{$Message Error 'Recurso não implementado'}
{$Message Fatal 'Necessita revisão'}
Diretivas $Region e $J+
As diretivas $Region e $EndRegion nos permitem definir blocos de código visando organizar mais o mesmo:
Agora veremos como é possível alterar o valor de uma constante, é isso mesmo que você leu, vamos alterar o valor de uma constant.
Quando declaramos uma constante e tentamos alterar o valor da mesma, não conseguimos pois acabamos obtendo o seguinte problema.
Como podemos ver o Delphi não nos permite atribuir um valor á esta constante. Porém temos a diretiva {$J+} ou {$WRITEABLECONST ON} que nos permite alterar o valor de uma constante.