1
resposta

[Sugestão] Extension functions x member functions

Não dava pra responder o tópico já existente do André por ter sido criado há mais de um mês, então criei um novo. Eu também estava em dúvida sobre por que escrever o criaGamer como uma extension function ao invés de já escrever dentro da própria classe, então eu pesquisei a respeito e vi essas três razões para se escolher criar uma função como extension:

  1. Manter o código dentro da classe fazendo apenas coisas essenciais do contexto dela. No caso de uma data class, faz sentido que ela só sirva para entregar dados crus (neste caso, dados do json do gamer), sem nenhuma lógica de negócio de fato dentro dela.

  2. Não criar dependências desnecessárias. Considerando que a criaGamer serve apenas para adicionar uma conveniência, que é o retorno de um outro objeto construído com propriedades da classe, pode ser melhor criar essa função num arquivo separado para deixar o código da classe mais enxuto, sem que uma classe esteja necessariamente amarrada a outra (nesse projetinho pequeno não faz diferença, mas em um grande, ou em uma biblioteca que possa ser compartilhada, faz sentido).

  3. Extension functions são um pouco mais eficientes por serem baseadas em tempo de compilação (já que não acessam o objeto diretamente), enquanto member functions são baseadas em tempo de execução (seu acesso depende do tempo de vida do objeto dentro da execução do programa)

O que acham? Espero que ajude outras pessoas que tenham essa dúvida.

1 resposta

Oi Daniel! Tudo bem?

Que legal que você trouxe essa discussão sobre extension functions e member functions. Você fez uma análise bem detalhada das razões para usar extension functions, e elas fazem muito sentido, especialmente em contextos onde queremos manter o código mais limpo e modular.

  1. Manter o código dentro da classe focado em suas responsabilidades principais: Isso é realmente importante para manter a coesão da classe. Em data classes, por exemplo, o foco deve ser apenas nos dados, sem adicionar lógica de negócio desnecessária.

  2. Evitar dependências desnecessárias: Criar funções em arquivos separados pode ajudar a manter o código mais organizado e evitar que classes fiquem fortemente acopladas. Isso é especialmente útil em projetos maiores ou bibliotecas.

  3. Eficiência das extension functions: Embora a diferença de desempenho possa não ser perceptível em muitos casos, é interessante saber que extension functions são resolvidas em tempo de compilação, o que pode trazer benefícios em termos de desempenho.

No seu contexto específico, a ideia de usar uma extension function para converter InfoGamerJson em Gamer é uma ótima aplicação desse conceito. Isso torna o código mais legível e reutilizável, já que você pode chamar criaGamer() em qualquer lugar que tenha um InfoGamerJson, sem precisar repetir a lógica de conversão.

Espero ter ajudado e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!