Veja neste artigo um tema não muito explorado e bem pouco conhecido por muitos programadores Delphi, o template. O template é um modelo, esqueleto, estrutura, ou seja, é algo pra você usar como base pra alguma coisa. Imagina você ficar digitando toda hora uma mesma estrutura, isso se torna ‘chato’ e trabalhoso, ficar repetindo o mesmo texto. Quando usamos um template, ele já faz este trabalho ‘chato’ e repetitivo. Usamos isso o tempo todo no Delphi, você usa isso, mas será que sabe que usa? Você sabia que tem como criar o seu próprio template?

Iremos ver um exemplo clássico. Na figura abaixo podemos notar o template “for”.

Template básico

Figura 1: Template básico

Quando digitamos um código e este tem um template, como é o caso de quando digitamos o for, o template já monta toda estrutura, basta irmos digitando o texto for, depois pressionar o TAB, por exemplo, mudar o I para J, depois pressionamos o TAB, digitamos o valor inicial de 0 para 1, e por fim digitamos o final do nosso Loop, no caso está List.Count -1, poderíamos colocar Combobox1.Items.Count, e novamente pressionar a tecla TAB, automaticamente o template declara a variável J como Integer, isso é ser RAD, isso é Delphi, é rápido funcional e muito ágil.

Exemplo do template for finalizado

Figura 2: Exemplo do template for finalizado

Existem outros milhares de templates, experimente criar uma unit nova e pressione a tecla ctrl+J, e veja o que acontece. Conforme você vai digitando as letras, os templates são filtrados, pra você criar uma classe basta digitar ‘class’ e serão exibidos os templates que temos prontos para ‘class’. Isso auxilia e muito na produtividade e na criação de códigos mais rápido.

Exibindo os templates com ctrl+J

Figura 3: Exibindo os templates com ctrl+J

Agora que sabemos o que é um template, e também sabemos que usamos o tempo todo no Delphi, vamos saber como criar um template para uma necessidade nossa.

Para criar o nosso template precisamos acessar o menu File>New>Other>Other Files>Code Template, veja a imagem abaixo:

Criando o Code Templatece

Figura 4: Criando o Code Templatece

Neste exemplo iremos criar um Loop com While not eof e logo em seguida iremos utilizar o comando NEXT, para deixar o loop mais interessante. Veja o código que será criado pra você.

Listagem 1: Código básico do Template


<?xml version="1.0" encoding="utf-8" ?>
<codetemplate	xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
				version="1.0.0">
	<template name="" invoke="manual">
		<description>

		</description>
		<author>

		</author>
		<code language=""><![CDATA[]]>
		</code>
	</template>
</codetemplate>

Vamos ver na prática, pra deixar mais dinâmico e menos teórico, vamos lá.

Passo 1 – Iremos ver como definir o nome do nosso template, geralmente o nome que colocamos em ‘name=’ é o mesmo nome que utilizamos para o arquivo .xml, iremos chamar de “WhileN”. Veja baixo onde devemos salvar este template.

No Delphi 2009 este arquivo deverá ser salvo dentro da pasta:
C:\Arquivos de programas\CodeGear\RAD Studio\6.0\ObjRepos\Code_Templates\Delphi

No Delphi 2010, XE, XE2 este arquivo deverá ser salvo dentro da pasta:
C:\Documents and Settings\<usuário>\Meus documentos\RAD Studio\code_templates\

Listagem 2: Declarando o nome do template


1: <?xml version="1.0" encoding="utf-8" ?>
2: <codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
3: version="1.0.0">
4: <template name="WhileN" invoke="manual">

Passo 2 – Iremos agora declarar uma variável para representar o nosso DataSet, que fará parte do template.

Listagem 3: Declarando variáveis


1: <?xml version="1.0" encoding="utf-8" ?>
2: <codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
3: version="1.0.0">
4: <template name="WhileN" invoke="manual">
5:
6: <point name="DataSet"> <!-- Nome da nossa variável -->
7: <script language="Delphi"> <!-- Linguagem Delphi -->
8: InvokeCodeCompletion; <!— Invocado junto com CodeCompletion -->
9: </script>
10: <text>
11: DataSet <!-- Texto da nossa variável criada -->
12: </text>
13: <hint>
14: Digite o Loop com While e Next <!-- Hint para exibir o template, não é obrigatório -->
15: </hint>
16: </point>

Passo 3 – Este passo não é obrigatório, iremos definir uma descrição e também o autor que fez o template, apenas pra questão de documentação do código.

Listagem 4: Declarando variáveis


1: <?xml version="1.0" encoding="utf-8" ?>
2: <codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
3: version="1.0.0">
4: <template name="WhileN" invoke="manual">
5:
6: <point name="DataSet"> <!-- Nome da nossa variável -->
7: <script language="Delphi"> <!-- Linguagem Delphi -->
8: InvokeCodeCompletion; <!— Invocado junto com CodeCompletion -->
9: </script>
10: <text>
11: DataSet <!-- Texto da nossa variável criada -->
12: </text>
13: <hint>
14: Digite o Loop com While e Next <!-- Hint para exibir o template, não é obrigatório -->
15: </hint>
16: </point>
17: <description>
18: Digite sua descrição <!-- apenas uma descrição, não é obrigatório -->
19: </description>
20: <author>
21: Wesley Yamazack - DevMedia <!-- Autor do template, não é obrigatório -->
22: </author>

Passo 4 – Este passo é o mais importante de todos e onde podemos definir a estrutura do template, ou seja, o que realmente ele irá fazer.

Listagem 5: Montando a estrutura do template.


1: <?xml version="1.0" encoding="utf-8" ?>
2: <codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
3: version="1.0.0">
4: <template name="WhileN" invoke="manual">
5:
6: <point name="DataSet"> <!-- Nome da nossa variável -->
7: <script language="Delphi"> <!-- Linguagem Delphi -->
8: InvokeCodeCompletion; <!— Invocado junto com CodeCompletion -->
9: </script>
10: <text>
11: DataSet <!-- Texto da nossa variável criada -->
12: </text>
13: <hint>
14: Digite o Loop com While e Next <!-- Hint para exibir o template, não é obrigatório -->
15: </hint>
16: </point>
17: <description>
18: Digite sua descrição <!-- apenas uma descrição, não é obrigatório -->
19: </description>
20: <author>
21: Wesley Yamazack - DevMedia <!-- Autor do template, não é obrigatório -->
22: </author>
23: <code language="Delphi" context="methodbody" delimiter="|">
24: <![CDATA[
25: While not |DataSet|.eof do
26: begin
27: |DataSet|.Next;
28: end;
29: |end|
30: ]]>
31: </code>
32: </template>
33: </codetemplate>

Podemos notar que na linha 23 foi definida a linguagem deste código, o lugar onde será implementado, no corpo do método e por último o delimitador utilizado para trabalhar com palavras não reservadas ( são palavras exclusivas do Delphi: begin, end, while, eof, not, do, next ).

Podemos notar que na linha 24 temos o começo do código, como se fosse o begin de um método.

Notamos ainda que na linha 25 estamos começando a declarar a estrutura do nosso loop, note que estamos utilizando a palavra DataSet definida nas linha 6 e 11 entre o delimitador “|”.

Podemos notar também que na linha 26 e 28 estamos utilizando palavras reservadas do Delphi, ou seja, não precisamos utilizar o delimitador “|”.

Em seguida, na linha 29 temos o encerramento do código do template, é obrigatório ter este fechamento.

Podemos notar que na linha 30, temos o fechamento da tag da linha 24, é nela que identificamos o começo e o final do nosso template.

Com isso fechamos o código completo do mesmo, lembrando que foi salvo no diretório padrão dos templates, dependendo da versão do seu Delphi. Você não precisa fazer mais nada para funcionar o template, nem fechar a IDE do Delphi, simplesmente ele já irá aparecer.

Vamos ver na prática como o template ficou, em algum projeto qualquer, você pode ir ao editor de código e pressionar o CTRL+J, automaticamente irá abrir o ‘code template‘, e logo em seguida vamos digitar while, observe o que você deverá ver no seu projeto.

Lista de templates

Figura 5: Lista de templates

Vamos localizar o nosso template ‘WhileN’, e selecionar o mesmo. Com isso automaticamente o código abaixo será exibido:

Template criado e funcionando

Figura 6: Template criado e funcionando

Conclusão

Como podemos notar, é um processo bem simples criar um template, e bem funcional também, desta forma podemos evitar repetição desnecessária de códigos e tornar a produtividade muito maior.

Vamos ficando por aqui um abraço e até o próximo artigo.