Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Delphi Prism – Parte 1
Delphi Prism – Parte 2
Delphi Prism – Parte 3
Delphi Prism – Parte 5
O artigo irá tratar de demonstrar algumas das melhorias e novidades na utilização da linguagem do Delphi Prism destacando com trechos de códigos as funcionalidades presentes nesta versão que não se enquadram em versões anteriores do Delphi.
Para que serve
Os recursos demonstrados neste artigo servem para facilitar e acelerar a codificação, incluindo novas funcionalidades avançadas presentes na linguagem, além de aprimorar, aperfeiçoar e realçar o que cada recurso apresenta de melhor para o desenvolvimento ajudando inclusive na orientação a objetos.
Em que situação o tema é útil
O tema é útil para auxiliar aqueles que já possuem conhecimento na linguagem Delphi e que gostariam de verificar o que há de novo no Delphi Prism, dessa forma, o artigo auxiliará na ampliação dos conhecimentos focados diretamente em pontos chave para que tornem o desenvolvimento de código mais enxuto, simplificado e com qualidade.
Delphi Prism – Melhorias da linguagem
No desenvolvimento do artigo será visto o uso de Delegates para encapsular a referência de um método ou eventos personalizados. Logo após, o uso de “Type” para indicar a definição de um ou mais tipos no Delphi Prism. Após, surge “Abstract” para a definição de membros de uma classe, permitindo que a classe onde ocorre a definição não possua a implementação desses membros. O uso de “Final” para indicar que o código a ser definido é final e não poderá ser modificado por classes descendentes. A utilização de “Has” para definições de contextos genéricos. E, por dar continuidade a contextos genéricos, surge “Is” possibilitando indicar um determinado tipo específico para uso. Além disso, aparece o “Iterator” realizando uma codificação de forma mais simplificada de sequências customizadas de dados. A palavra “Of” para realizar referência a determinadas classes. A grande funcionalidade do uso de “Default” para definições de propriedades relacionadas a matrizes e classes. “Inline” determinando estruturas de tamanho fixo incorporadas em blocos de códigos. As restrições para somente leitura através de “readonly”. A codificação utilizando “add” e “remove” em eventos. E, por final, a utilização de códigos “unsafe” e “pinned” possibilitando o uso de recursos de maneira não gerenciada.
Delegate
A palavra delegate é utilizada para definir tipos de eventos personalizados, com ela é possível criar um novo tipo de evento customizado que poderá ser utilizado em uma determinada classe. A definição de delegate é algo semelhante ao conceito de objetos para procedures que está presente em outras versões anteriores do Delphi.
O tipo delegate nos permite encapsular a referência de um método dentro de um objeto e este mesmo objeto pode ser transferido entre chamadas através das classes de uma aplicação para ser invocado em algum outro ponto do programa, desta forma não se sabendo em tempo de compilação qual método será invocado. Simplificando esta ideia inicial, por exemplo, pode-se encapsular um método dentro de um objeto e passar este objeto como argumento entre chamadas de métodos e em algum determinado ponto do código resgatar esta referência e invocar o método pelo qual o delegate foi inscrito. Assim o comportamento de execução do método será realizado de acordo com sua referência assinada.
Delegates possuem estreita ligação com a estrutura de métodos e é declarado com as mesmas características de um método, possuem valor de retorno e parâmetros. Uma importante observação é que para escrever um método através de um delegate, a declaração do método e do delegate devem ser compatíveis. Se um método tem como retorno um tipo inteiro e dois parâmetros de entrada do tipo string o delegate que irá representá-lo em uma chamada anônima deverá possuir uma estrutura idêntica, caso contrário o código fonte apresentará erros.
O conceito de delegate se originou na ideia de função para ponteiros que é bastante difundida dentro do universo de programação como linguagens C/C++. Uma relevante e considerável melhoria que o .NET trouxe em relação aos ponteiros para função do C/C++ não gerenciado é a vantagem dos delegates serem tipos seguros, pois as funções para ponteiros são representadas apenas pelo endereço em memória e não dizem nada a respeito da quantidade de parâmetros ou tipos e valores de retorno. Com isso, se em tempo de desenvolvimento o programador se equivocar na declaração destas estruturas, este erro somente será descoberto em tempo de execução e não tem como prever o comportamento da execução deste código. Já não é assim com os delegates, pois possuem uma estrutura de metadados bem definida que descreve seus atributos, não acontecendo o cenário citado anteriormente. A ...