0Pricing
Kotlin Academy · Leçon

Fonctions opérateurs

Surcharger plus, moins, etc.

Fonctions opérateurs est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.

Qu’est-ce que la surcharge des opérateurs ?

La surcharge des opérateurs permet à vos types de réagir à des symboles comme + ou -. Vous définissez une fonction avec le modificateur operator et un nom spécial.

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

Le mot-clé operator

Le modificateur operator indique au compilateur que cette fonction implémente un opérateur. Sans lui, l’appel a + b ne fonctionnerait pas.

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

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

Noms conventionnels

Chaque opérateur correspond à un nom de fonction fixe : plus pour +, minus pour -, times pour *, div pour /, rem pour %.

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

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

Moins et multiplication

Vous pouvez définir plusieurs opérateurs pour un même type.

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

Opérateurs unaires

Le moins unaire utilise unaryMinus ; le plus unaire utilise unaryPlus ; not implémente l’opérateur !.

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

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

Incrémentation et décrémentation

inc implémente ++ et dec implémente --. Ils renvoient une nouvelle valeur du même type.

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

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

Affectation composée

plusAssign implémente += pour les récepteurs modifiables. Si seul plus existe, += réaffecte la variable à la place.

class Bag {
    val items = mutableListOf<String>()
    operator fun plusAssign(item: String) { items.add(item) }
}

fun main() {
    val bag = Bag()
    bag += "apple"
    println(bag.items)
}

Opérateurs avec des types différents

Le type du paramètre n’a pas besoin de correspondre à celui du récepteur. Ici, multiplier un point par un Int renvoie un point.

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

Sous forme de fonctions d’extension

Les opérateurs peuvent être définis comme des extensions, même pour des types que vous ne possédez pas.

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

Chaîner les opérateurs

Les opérateurs surchargés se composent comme les opérateurs intégrés, tout en respectant les règles normales de priorité.

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

Les types de retour sont libres

Un opérateur peut renvoyer n’importe quel type, mais renvoyer le même type rend son utilisation intuitive et permet de le chaîner.

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

Vérification rapide

Vérifiez votre compréhension des fonctions opérateurs.

Récapitulatif

Vous avez découvert les fonctions opérateurs :

  • Marquez les fonctions avec operator et un nom conventionnel (plus, minus, times, ...).
  • Les opérateurs unaires, d’incrémentation et d’affectation composée sont pris en charge.
  • Les opérateurs peuvent être des membres ou des extensions.
  • Renvoyer le même type permet de conserver un chaînage intuitif.
data class P(val x: Int) {
    operator fun plus(o: P) = P(x + o.x)
}

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

Questions Fréquemment Posées

La leçon « Fonctions opérateurs » est-elle gratuite ?

Oui — le texte complet de « Fonctions opérateurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fonctions opérateurs » ?

Surcharger plus, moins, etc. Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Kotlin Academy ?

Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Fonctions opérateurs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?

Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fonctions opérateurs
  2. Opérateurs de comparaison
  3. Indexation et invocation
  4. Bonnes pratiques
← Retour à Kotlin Academy