Introdução
Continuando aprendizado e descoberta sobre Kotlin. Falaremos sobre funções
Recursos da linguagens observadores e experimentados
Nessa seção, pretendo falar de alguns recursos que pude experimentar durante o curso, e pratiquei em um projeto piloto que está disponível em um repositório no meu github onde pretendo colocar os demos do que ando testando com Kotlin. Esse repositório é o kotlin-lab.
Funções
A palavra reservada fun define uma função em Kotlin. Os parametros são declarados com seus tipos e nomes e pode ser informado (ou não) um tipo de retorno da função. O corpo da função é envolvido por um bloco separado por chaves {}.
A invocação da função acontece pelo nome dela com passagem de parâmetro. Se não existe um valor de retorno, essa função não será atribuída a nenhuma variável.
Kotlin tem suporte a overload (sobrecarga) de funções. Uma função é diferenciada da outra devido a sua lista de parâmetros. Os parâmetros+retorno compõem a assinatura do método, entretanto o tipo de retorno não pode ser diferente entre funções sobrecarregadas.
Exemplo:
Suporte a varargs e optional/named parameters
Em Kotlin é possível usar a palavra varargs para passar um número X de valores para um parâmetro. Também é possível definir um valor default para um parâmetro, tornando a chamada do método opcional para aquele parâmetro. O recurso de default para parâmetro, reduz necessidade de sobrecarga comparado com Java.
Exemplo:
Varargs:
Optional parameters:
Named parameters:
Unit Value
Se uma função não tem nenhum valor de retorno, Kotlin assume que retorno é Unit. Esse valor não precisa ser reclarado explicitamente.
Single expression functions
Quando uma função retorna uma expressão, o corpo pode ser especificado após o símbolo =.
Extension functions/properties
Kotlin oferece o mecanismo para que uma classe seja extendida com uma nova feature sem necessidade de trabalhar com herança ou outro tipo de técnica, como uso de Decorator, por exemplo. Existe uma declaração específica chamada extensão. Exemplo de uso: É necessário escrever um recurso para uma classe de uma biblioteca de terceiros que não é extensível.
Exemplo de aplicação:
A referência this, dentro da implementação da função, corresponde a classe em questão. O recurso não modifica as classes, por definição ele não adiciona novos membros na classes mas basicamente faz as funções serem chamados dentro de um escopo de classe.
Conclusão
Nesse estudo, apresentei alguns recursos do Kotlin que são bastante inovadores para mim que vim da linguagem Java. Espero continuar aprendendo.
Outras Fontes:
- https://kotlinlang.org/docs/tutorials/kotlin-for-py/functions.html
- https://kotlinlang.org/docs/reference/extensions.html
- https://kotlinlang.org/docs/reference/functions.html