Funzioni operator
Sovraccarichi plus, minus e così via
Funzioni operator è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.
Che cos’è l’overloading degli operatori?
L’overloading degli operatori consente ai propri tipi di rispondere a simboli come + o -. Si definisce una funzione con il modificatore operator e un nome speciale.
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 parola chiave operator
Il modificatore operator indica al compilatore che questa funzione implementa un operatore. Senza di esso, la chiamata a + b non funzionerebbe.
data class Money(val amount: Int) {
operator fun plus(o: Money) = Money(amount + o.amount)
}
fun main() {
println(Money(5) + Money(3))
}Nomi convenzionali
Ogni operatore corrisponde a un nome di funzione fisso: plus per +, minus per -, times per *, div per /, rem per %.
data class Vec(val n: Int) {
operator fun times(k: Int) = Vec(n * k)
}
fun main() {
println(Vec(4) * 3)
}Minus e times
È possibile definire diversi operatori sullo stesso 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)
}Operatori unari
Il meno unario utilizza unaryMinus; il più unario utilizza unaryPlus; not implementa l’operatore !.
data class Temp(val c: Int) {
operator fun unaryMinus() = Temp(-c)
}
fun main() {
println(-Temp(10))
}Incremento e decremento
inc implementa ++ e dec implementa --. Restituiscono un nuovo valore dello stesso tipo.
data class Counter(val n: Int) {
operator fun inc() = Counter(n + 1)
}
fun main() {
var c = Counter(0)
c++
println(c.n)
}Assegnazione composta
plusAssign implementa += per i ricevitori mutabili. Se esiste solo plus, += riassegna invece la variabile.
class Bag {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val bag = Bag()
bag += "apple"
println(bag.items)
}Operatori con tipi diversi
Il tipo del parametro non deve necessariamente corrispondere a quello del ricevitore. In questo caso, la scalatura di un punto tramite un Int restituisce 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)
}Come funzioni di estensione
Gli operatori possono essere definiti come estensioni, anche per tipi che non appartengono al codice sviluppato.
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))
}Concatenazione degli operatori
Gli operatori sottoposti a overloading si combinano come quelli incorporati, rispettando la normale precedenza.
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)
}I tipi restituiti sono liberi
Un operatore può restituire qualsiasi tipo, ma restituire lo stesso tipo rende l’utilizzo intuitivo e concatenabile.
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))
}Verifica rapida
Verifichi la sua comprensione delle funzioni operatore.
Riepilogo
Ha imparato a conoscere le funzioni operatore:
- Contrassegni le funzioni con
operatore un nome convenzionale (plus,minus,times, ...). - Sono supportati gli operatori unari, di incremento e di assegnazione composta.
- Gli operatori possono essere membri o estensioni.
- Restituire lo stesso tipo rende intuitiva la concatenazione.
data class P(val x: Int) {
operator fun plus(o: P) = P(x + o.x)
}
fun main() {
println((P(2) + P(3)).x)
}Domande Frequenti
La lezione «Funzioni operator» è gratuita?
Sì — il testo completo di «Funzioni operator» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.
Cosa imparerò in «Funzioni operator»?
Sovraccarichi plus, minus e così via Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Kotlin Academy?
Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Funzioni operator»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?
Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Funzioni operator
- Operatori di confronto
- Index e invoke
- Buone pratiche