Funções de Operador
Sobrecarregue plus, minus etc.
Funções de Operador é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
O que é sobrecarga de operadores
A sobrecarga de operadores permite que seus tipos respondam a símbolos como + ou -. Você define uma função com o modificador operator e um nome especial.
data class Point(val x: Int, val y: Int) {
operator fun plus(o: Point) = Point(x + o.x, y + o.y)
}
fun main() {
println(Point(1, 2) + Point(3, 4))
}A palavra-chave de operador
O modificador operator informa ao compilador que essa função implementa um operador. Sem ele, chamar a + b não funcionaria.
data class Money(val amount: Int) {
operator fun plus(o: Money) = Money(amount + o.amount)
}
fun main() {
println(Money(5) + Money(3))
}Nomes convencionais
Cada operador corresponde a um nome de função fixo: plus para +, minus para -, times para *, div para / e rem para %.
data class Vec(val n: Int) {
operator fun times(k: Int) = Vec(n * k)
}
fun main() {
println(Vec(4) * 3)
}Subtração e multiplicação
É possível definir vários operadores para o mesmo tipo.
data class Point(val x: Int, val y: Int) {
operator fun minus(o: Point) = Point(x - o.x, y - o.y)
operator fun times(k: Int) = Point(x * k, y * k)
}
fun main() {
println(Point(5, 5) - Point(1, 2))
println(Point(2, 3) * 2)
}Operadores unários
O operador unário de menos usa unaryMinus; o operador unário de mais usa unaryPlus; not implementa o operador !.
data class Temp(val c: Int) {
operator fun unaryMinus() = Temp(-c)
}
fun main() {
println(-Temp(10))
}Incremento e decremento
inc implementa ++ e dec implementa --. Eles retornam um novo valor do mesmo tipo.
data class Counter(val n: Int) {
operator fun inc() = Counter(n + 1)
}
fun main() {
var c = Counter(0)
c++
println(c.n)
}Atribuição composta
plusAssign implementa += para receptores mutáveis. Se existir apenas plus, += fará uma nova atribuição à variável.
class Bag {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val bag = Bag()
bag += "apple"
println(bag.items)
}Operadores com tipos diferentes
O tipo do parâmetro não precisa corresponder ao receptor. Aqui, dimensionar um ponto por um número inteiro retorna um ponto.
data class Size(val w: Int, val h: Int) {
operator fun times(factor: Int) = Size(w * factor, h * factor)
}
fun main() {
println(Size(2, 3) * 4)
}Como funções de extensão
Operadores podem ser definidos como extensões, até mesmo para tipos que não pertencem a você.
data class Point(val x: Int, val y: Int)
operator fun Point.plus(o: Point) = Point(x + o.x, y + o.y)
fun main() {
println(Point(1, 1) + Point(2, 2))
}Encadeando operadores
Operadores sobrecarregados são compostos como os operadores integrados, respeitando a precedência normal.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
val r = N(2) + N(3) * N(4)
println(r.v)
}Os tipos de retorno são livres
Um operador pode retornar qualquer tipo, mas retornar o mesmo tipo mantém o uso intuitivo e permite o encadeamento.
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}Teste rápido
Teste sua compreensão sobre funções de operador.
Recapitulação
Você aprendeu sobre funções de operador:
- Marque as funções com
operatore um nome convencional (plus,minus,times, ...). - Operadores unários, de incremento e de atribuição composta são compatíveis.
- Operadores podem ser membros ou extensões.
- Retornar o mesmo tipo mantém o encadeamento intuitivo.
data class P(val x: Int) {
operator fun plus(o: P) = P(x + o.x)
}
fun main() {
println((P(2) + P(3)).x)
}Perguntas Frequentes
A aula “Funções de Operador” é grátis?
Sim — o texto completo de “Funções de Operador” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “Funções de Operador”?
Sobrecarregue plus, minus etc. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Funções de Operador”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções de Operador
- Operadores de Comparação
- Índice e Invocação
- Boas Práticas