0Pricing
Kotlin Academy · Lección

Funciones de operador

Sobrecargue plus, minus, etc.

Funciones de operador es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué es la sobrecarga de operadores?

La sobrecarga de operadores permite que sus tipos respondan a símbolos como + o -. Defina una función con el modificador operator y un nombre 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))
}

La palabra clave operator

El modificador operator indica al compilador que esta función respalda un operador. Sin él, la llamada a + b no funcionaría.

data class Money(val amount: Int) {
    operator fun plus(o: Money) = Money(amount + o.amount)
}

fun main() {
    println(Money(5) + Money(3))
}

Nombres convencionales

Cada operador se corresponde con un nombre de función fijo: plus para +, minus para -, times para *, div para / y rem para %.

data class Vec(val n: Int) {
    operator fun times(k: Int) = Vec(n * k)
}

fun main() {
    println(Vec(4) * 3)
}

Minus y times

Puede definir varios operadores para el mismo 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 unarios

El menos unario utiliza unaryMinus; el más unario utiliza unaryPlus; not respalda el operador !.

data class Temp(val c: Int) {
    operator fun unaryMinus() = Temp(-c)
}

fun main() {
    println(-Temp(10))
}

Incremento y decremento

inc respalda ++ y dec respalda --. Devuelven un valor nuevo del mismo tipo.

data class Counter(val n: Int) {
    operator fun inc() = Counter(n + 1)
}

fun main() {
    var c = Counter(0)
    c++
    println(c.n)
}

Asignación compuesta

plusAssign respalda += para receptores mutables. Si solo existe plus, += reasigna la variable en su lugar.

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 con tipos diferentes

El tipo del parámetro no tiene que coincidir con el del receptor. En este caso, escalar un punto mediante un Int devuelve un punto.

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 funciones de extensión

Los operadores pueden definirse como extensiones, incluso para tipos que no le pertenecen.

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))
}

Encadenamiento de operadores

Los operadores sobrecargados se combinan como los integrados y respetan la precedencia 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)
}

Los tipos de retorno son libres

Un operador puede devolver cualquier tipo, pero devolver el mismo tipo facilita un uso intuitivo y encadenable.

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))
}

Comprobación rápida

Compruebe su comprensión de las funciones de operador.

Resumen

Ha aprendido sobre las funciones de operador:

  • Marque las funciones con operator y un nombre convencional (plus, minus, times, ...).
  • Se admiten operadores unarios, de incremento y de asignación compuesta.
  • Los operadores pueden ser miembros o extensiones.
  • Devolver el mismo tipo hace que el encadenamiento resulte intuitivo.
data class P(val x: Int) {
    operator fun plus(o: P) = P(x + o.x)
}

fun main() {
    println((P(2) + P(3)).x)
}

Preguntas frecuentes

¿La lección «Funciones de operador» es gratis?

Sí — el texto completo de «Funciones de operador» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Funciones de operador»?

Sobrecargue plus, minus, etc. Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Funciones de operador»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones de operador
  2. Operadores de comparación
  3. Indexación e invocación
  4. Buenas prácticas
← Volver a Kotlin Academy