Fechar

quarta-feira, 3 de agosto de 2011

Criando um tipo de dado Avançado em Delphi - Parte 1


Criando um tipo de dado Avançado em Delphi:

Talvez você não saiba, mas o tipo record em pascal pode conter em sua estrutura functions e procedures desde o Delphi 2006, Sendo assim nos podemos tirar proveito disso para criar um tipo de dado mais avançado.
Vamos tomar como exemplo o tipo string. O que você consegue fazer com um dado do tipo string? Nada, apenas usar para guardar o seu conteúdo. Qualquer operação que você precise realizar nesse dado terá que usar alguma função externa.
Para contornar isso, podemos usar o record para criar um tipo de dado mais avançado e como exemplo vamos criar um tipo TEAMString (o nome é sugestivo) :

Abra o delphi (neste artigo fora utilizado o Delphi 2007) e crie um novo projeto para aplicação:


Agora adicione uma nova unit e salve-a como untTEAMString:


Agora estamos pronto para começar! Vamos criar o record:

unit untTEAMString;

interface
 uses Classes,SysUtils;
type
  TEAMString = record
    Text: string;
  end;

implementation

end. 

Repare que o nosso Tipo TEAMString possui um campo "Text" esse campo nós vamos usar para guardar  uma string e posteriormente aplicar operações nesse dado.

Agora vamos adicionar algumas operações mais comuns com strings para deixar esse nosso tipo mais parrudo. Para começar vamos utilizar as  operações para remover espaços em branco no inicio, no final e no inicio e no final de uma string. Então vamos adiciona-las:

TEAMString = record
    Text: string;

    {Remove os Espaços em branco }
    function Alltrim: string;
    function LTrim: string;
    function RTrim: string;

  end;

Agora a implementação:

uses Classes,SysUtils;

type
  
TEAMString = record
    Text: string;

    {Remove os Espaços em branco }
    function Alltrim: string;
    function LTrim: string;
    function RTrim: string;

  end;

implementation

{ TEAMString }

// Objetivo:  Remove os Espaços em branco
function TEAMString.Alltrim: string;
begin
  Result := Trim(Text);
end;

// Objetivo:  Remove os Espaços em branco à esquerda da string
function TEAMString.LTrim: string;
var
  I: Integer;
begin
  I := 0;
  while True do
  begin
    inc(I);
    if I > length(self.Text) then
      break;
    if self.Text[I] <> #32 then
      break;
  end;
  Result := Copy(self.Text, I, length(self.Text));
end;

//Objetivo:  Remover os espaços em branco a direita da string
function TEAMString.RTrim: string;
var
  I: Integer;
begin
  I := length(self.Text) + 1;
  while True do
  begin
    Dec(I);
    if I <= 0 then
      break;
    if self.Text[I] <> #32 then
      break;
  end;
  Result := Copy(self.Text, 1, I);
end;

end.

Agora já temos alguma funcionalidade para esse nosso tipo. Vamos Fazer um pequeno teste.
No formulário da aplicação adicione um botão e 4 edits. Também não se esqueça de adcionar
a untTEAMString no USES do formulário:

uses Classes,SysUtils;


Codificando o botão:
Declare uma variável do tipo TEAMString e atribua a ela o valor do Edit texto. Em seguida, atribua os aos outros edits o resultado das operações:


procedure TForm1.btn1Click(Sender: TObject);
var
  EAMString:TEAMString;
begin
  EAMString.Text := edtTexto.Text;
  edtTrimALL.Text := EAMString.Alltrim;
  edtTrimL.Text := EAMString.LTrim;
  edtTrimR.Text := EAMString.RTrim;
end; 


Rode a aplicação insira um texto com espaços a esquerda e a direita e clique no botão Ok:


Se você selecionar o texto com o mouse podera observar que o espaço em branco foi removido no Edit "Trim ALL" e removido a esquerda no Edit "Trim Left" e a direita no "Edit Trim Right".
Repare que realizamos algumas operações no dado sem ter o seu conteúdo alterado e sem precisar usar funções externas, deixando o nosso código muito mais limpo e legível! Isso sem  falar na produtividade que aumentara consideravelmente.
Já imaginou no que da para fazer? Nos próximos posts vamos adicionar novas funcionalidades e criar novos tipos avançados.

Confira aqui a segunda parte desse Artigo

0 comentários:

Postar um comentário

Mais Populares

Seguidores

Є & V. Copyright 2011 Evaldo Avelar Marques - sprintrade network