Pílula K#06 — Funções Infixas
Você já ouviu falar em funções infixas em Kotlin? Nesta dose, vamos dar uma olhada em mais uma das frescuras legais do Kotlin, como as funções infixas funcionam e fornecer vários exemplos para ajudá-lo a começar.
O que são funções infixas?
As funções infixas são uma maneira de chamar uma função com uma sintaxe especial (pra você que quer ser o diferentão do time).
Para definir uma função infix, você precisa marcá-la com a palavra-chave infix
. Isso permite que você chame uma função como se fosse um operador.
Por exemplo, se você tem uma função chamada adicionar
, você pode definir essa função como infix e, em seguida, usar a notação infix para chamar a função como se fosse um operador de adição:
infix fun Int.adicionar(outro: Int): Int {
return this + outro
}
fun main() {
val resultado = 1 adicionar 2
println(resultado)
}
/*Saída
3
*/
// E é a mesma coisa coisa que: 1.adicionar(2)
Observe como definimos uma função adicionar
na classe Int
usando a palavra-chave infix
. Isso nos permite usar a função adicionar
com a notação infix 1 adicionar 2
.
Dahora neh? fala a verdade! É frescura? Sim, é! Mas temos que concordar que pode tornar o código mais legível e expressivo.
Exemplos de funções infixas
Comparação de valores
infix fun Int.éMenorQue(outro: Int): Boolean {
return this < outro
}
fun main() {
val resultado = 1 éMenorQue 2
println(resultado)
}
/*Saída
true
*/
Concatenação de Strings
infix fun String.concatenar(outro: String): String {
return this + outro
}
fun main() {
val resultado = "Pílula #" concatenar "6 - Funções Infixas"
println(resultado)
}
/*Saída
Pílula #6 - Funções Infixas
*/
Operações matemáticas
infix fun Int.multiplicarPor(outro: Int): Int {
return this * outro
}
fun main() {
val resultado = 2 multiplicarPor 3
println(resultado)
}
/*Saída
6
*/
Funções de extensão em classes personalizadas
class Pessoa(val nome: String, val idade: Int)
infix fun Pessoa.temIdadeMaiorQue(outro: Pessoa): Boolean {
return this.idade > outro.idade
}
fun main() {
val pessoa1 = Pessoa("João", 30)
val pessoa2 = Pessoa("Maria", 25)
val resultado = pessoa1 temIdadeMaiorQue pessoa2
println(resultado)
}
/*Saída
true
*/
Dicas
- Elas só podem ser definidas em membros de extensão ou membros de classe. Isso significa que você não pode usar funções infixas em funções regulares.
- Elas só podem ter um parâmetro. Isso significa que você não pode usar funções infixas em funções que exigem mais de um parâmetro.
- Tem precedência menor que os operadores aritméticos, conversões de tipo (cast) e operador rangeTo…
5 operadorInfixA 3 + 2
é o mesmo que5 operadorInfixA (3 + 2)
3 operadorInfixB 4 + 6
é o mesmo que3 operadorInfixB (4 + 6)
x operadorInfixC y as List<*>
é…..x operadorInfixC (y as List<*>)
- Tem precedência maior que operadores booleanos, verificação de existência e outros operadores…
x && b operadorInfixD c
é….x && (b operadorInfixD c)
x operadorInfixE b in c
é…(x operadorInfixE b) in c
Uma boa dose, né não? A notação infixa é uma maneira elegante de escrever tornando seu código mais legível e expressivo. Agora que viu vários exemplos de funções infixas e algumas dicas, vai lá e escreve algumas “inFunções” (… ok, parei)!
E para a próxima dose, somente com uma "condição": Está curtindo essas pílulas? Se SIM, só aguardar, SENÃO, comenta o que posso melhorar.