Generics

Conceito

Uma parte importante da engenharia de software é construir componentes que não apenas tenham APIs bem definidas e consistentes, mas também sejam reutilizáveis. Componentes que são capazes de trabalhar com os dados de hoje, bem como com os dados de amanhã, fornecerão os recursos mais flexíveis para a construção de grandes sistemas de software". (Fonte: https://www.typescriptlang.org/docs/handbook/generics.html#hello-world-of-generics)

Características:

  • É uma das principais ferramentas para a criação de componentes reutilizáveis;
  • Fornece uma maneira de fazer com que os componentes funcionem com qualquer tipo de dados e não se restrinjam a apenas um tipo;
  • Garante que o programa seja flexível.

Iremos abordar o conceito de Generics utilizando: Funções, interfaces e classes.

Contextualização

Para compreender melhor o conceito de Generics, vamos analisar o seguinte contexto: Vamos imaginar que devamos criar uma função que recebe um determinado valor como parâmetro e a função retorna esse valor. Observe a figura 1:

Figura 1- Função info

Descrição imagem

Na figura 1, a função recebe um valor do tipo numérico e retorna também um valor do tipo numérico, porém essa função não resolve nosso problema; além de desejarmor receber qualquer outro tipo de valor, o valor retornado deve ser do mesmo tipo do valor recebido.

A figura 2 apresenta um proposta para contornar esse problema, vejamos:

Figura 2 - Função info com any

Descrição imagem

Podemos observar na figura 2 que, utilizar o tipo de dado any como o tipo do parâmetro e também o tipo de retorno, resolve parcialmente nosso problema, pois é possível passar qualquer tipo como parâmetro. Porém o tipo retornado sempre será any, além de perder as verificações de tipo do compillador. Então essa não é a melhor forma de resolver nosso problema.

O que irá resolver definitivamente nosso problema é o uso de Generics.Observe o que acontece na figura 3:

Figura 3 - Função utilizando Generics

Descrição imagem

A figura 3 apresenta o conceito de variável de tipo <T>, onde será definido qual é o tipo do parâmetro recebido na função, bem como o tipo do retorno, ambos representados por T. Dessa forma, se o tipo for string será retornado uma string ou se o tipo for number será retornado um number e assim por diante. Assim, garantimos o tipo de retorno e a verificação do compilador TypeScript. Podemos observar a reutilização de código, pois uma função pode ser utilizada para diferentes tipos.

Nas próximas videoaulas veremos exemplos práticos da utilização de Generics em diferentes contextos.


Versão 5.3 - Todos os Direitos reservados