2
respostas

Qual a vantagem de ter um tipo função?

Não consigo entender qual a vantagem de ter uma variável do tipo função ou uma classe do tipo função, poderia me dar um exemplo prático de como eu poderia utilizar essa implementação?

2 respostas

Oi Lincoln

Em Kotlin essa feature de receber funções como parâmetros ou retornar uma função como resultado de um método chama "Higher-order functions". As funções de ordem superior ajudam a reduzir a redundância do código, permitindo que a funcionalidade do código comum seja passada como uma função para outra função. Aumenta a legibilidade do código :)

Um belo exemplo prático: https://play.kotlinlang.org/byExample/04_functional/01_Higher-Order%20Functions

Você alguma vez já se perguntou do por quê de seu computador poder ser reprogramado via software? Isso nem sempre foi assim, computadores antes da arquitetura de von Neumann eram programados diretamente em hardware, fazendo uso de jumpers para reprogramar os circuitos. Nas arquiteturas modernas, entretanto, código e dados são, em essência, a mesma coisa; ainda que muitas vezes ocupem espaços de endereçamento e tenham permissões distintas. Isso significa que suas funções, assim como suas variáveis, possuem endereços de memória, e podem ser referenciadas por ponteiros.

Em todos os três grandes paradigmas de programação há um mecanismo de aplicar esta idéia, desde as callbacks usadas no paradigma estruturado, o padrão Strategy das linguagens orientadas a objetos ou as HOFs (higher order functions) de linguagens funcionais. A grande vantagem no uso desta técnica reside na injeção de dependências, que permite compor funções de modo a mudar dinamicamente a "estratégia" com que uma ação será executada, e está no cerne das decisões de projeto que guiaram a criação dos 3 paradigmas modernos.

Caso você já tenha tido alguma experiência com matemática de ensino superior (álgebra linear e cálculo diferencial/integral) essa ideia não deve lhe ser estranha. Pense, por exemplo, na função integral. Ela recebe como parâmetro uma função, e retorna outra função; a anti-derivada da função passada como parâmetro.

Recomendo fortemente a leitura do Structure and Interpretation of Computer Programs.