Fala ai Radizeiros e Radizeiras, tudo bem com vocês?
Imagine uma situação na qual temos um Edit e um Memo dentro de um formulário e queremos que tudo o que for escrito neles apareça em caixa-alta. Imagine a principio também que, para atender essa funcionalidade, injetamos no evento onChange de cada um desses objetos rotinas para realizar essa operação.
Até o momento parece simples e fácil né?
Mas pare pra pensar o quanto se tornaria custoso em todo o seu projeto?
Um monte de casting dentro do seu projeto para realizar essas operações, e por que não deixar mais limpo seu código?
Hoje irei falar sobre absolute, não é aquela bebida, é um negócio muito legal que tem dentro do Delphi, mas que poucas pessoas usam.
De acordo com os arquivos de ajuda do Delphi, o modificador absolute é uma palavra reservada que torna possível que uma nova variável resida no mesmo endereço de memória de outra variável facilitando type-casting
Nessa nossa série de recursos do Delphi, o intuito é exatamente levar os recursos que temos no Delphi e que poucos usam, para que vocês possam aplicar no seu dia a dia, segundo as suas necessidades.
Realmente vale muito apena você conhecer esses diversos recursos que temos dentro do Delphi.
Então vamos lá em nosso exemplo bem simples.
Nesse meu exemplo, eu quero que tudo que eu digitar fique maiúsculo, é um exemplo muito simples não é?
procedure TForm1.Edit1Change(Sender: TObject); begin UpperNormal(Sender); //UpperAbsolute(Sender); end; procedure TForm1.Memo1Change(Sender: TObject); begin UpperNormal(Sender); //UpperAbsolute(Sender); end;
Como é um código simples vamos executar o exemplo e ver se ao digitar está colocando as informações em caixa alta.
Viu como que tudo que digitamos ficou maiúsculo?
Até aí nenhuma diferença não é verdade?
Vamos dentro do código desse método UpperNormal.
procedure TForm1.UpperNormal(Sender: TObject); begin if Sender is TEdit then TEdit(sender).Text := UpperCase(TEdit(Sender).Text); if Sender is TMemo then TMemo(sender).Text := UpperCase(TEdit(Sender).Text); end;
Dentro do evento do onChange desses componentes, a cada alteração é chamado o método UpperNormal, passando Sender, ou seja, o próprio objeto em si.
Ao receber o objeto, e o método trata esse objeto, se Sender for um Edit, é feito um casting nele, acessando a propriedade Text, que recebe um UpperCase no casting de Text, da mesma forma com o Memo.
Fazendo assim transformamos os textos em maiúsculo.
Mas até aqui nada de novo, não é verdade?
É aí que entra o Absolute, ele veio para eliminar esses casting, com o Absolute nós fazemos é um casting na declaração da variável.
Vou trocar agora o código dos botões, onde iremos executar o UpperAnsolute.
procedure TForm1.Edit1Change(Sender: TObject); begin //UpperNormal(Sender); UpperAbsolute(Sender); end; procedure TForm1.Memo1Change(Sender: TObject); begin //UpperNormal(Sender); UpperAbsolute(Sender); end;
Viu como falei anteriormente?
O Absolute é muito simples e rápido, e seu conceito é muito legal e poucas pessoas o utilizar.
Viu que ele fez praticamente a mesma coisa que a execução anterior.
Vamos ver agora como funciona esse UpperAbsolute?
procedure TForm1.UpperAbsolute(Sender: TObject); var Edit : TEdit absolute Sender; Memo : TMemo absolute Sender; begin if Sender is TEdit then Edit.Text := UpperCase(Edit.Text) else Memo.Text := UpperCase(Memo.Text); end;
Você já pode reparar que não possuo na implementação os casting, simplesmente é verificado se o Sender é um TEdit, é passado o valor maiúsculo para a variável Edit, assim também para o Memo.
Observou que não tem um casting dentro da implementação como fizemos anteriormente?
Isso acontece porque o Absolute, faz esse “casting” direto na declaração da variável, olha só que legal né?
Na tipificação da variável já passado o absolute, para que o compilador entenda que ao receber o Sender desses objetos seja feito o “casting” implicitamente.
Fazendo assim, estou apontando para o endereço da memória onde está o Sender, assumindo, lógico, o comportamento do objeto tipificado, por exemplo, TEdit.
A partir desse momento tenho uma variável Edit, que é do tipo TEdit, que está apontando para o endereço de memória onde está o Sender.
Dentro da implementação do método podemos trabalhar sem necessidade de casting.
Muito legal não é pessoal?
Não preciso mais fazer casting na implementação do código, somente declaro na variável e pronto, e só trabalhar com ele.
Muito simples, e rápido de usar, e deixa seu código mais limpo.
Só uma atenção, e ter um pouco de cuidado pois você estará trabalhando com ponteiro, implicitamente ele está apontando para algum lugar na memória, e se não tiver cuidado poderá ter problemas.
Mas o Delphi nessa parte de trabalhar com ponteiros é muito tranquilo, muito mais light.
Quando conhecemos os recursos da linguagem conseguimos eliminar muito lixo dentro do nosso código, fazendo com que ele se torne mais legível e de melhor compreensão para manutenções futuras.
Esse e dentre outros recursos você pode encontrar no CLUBE DE PROGRAMADORES EM DELPHI, lá você terá uma gama de conteúdos que podemos lhe auxiliar no seu dia a dia, e claro, ajudar a escalar mais sua aplicação.
E caso você tenha interesse de conhecer mais sobre generics acessa o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI, onde você não só terá conteúdos relacionados aos generics, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI