0Pricing
Kotlin Academy · Aula

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 operator e 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

  1. Funções de Operador
  2. Operadores de Comparação
  3. Índice e Invocação
  4. Boas Práticas
← Voltar para Kotlin Academy