0Pricing
Kotlin Academy · Leçon

Indexation et invocation

get, set et invoke

Indexation et invocation est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

L’opérateur d’indexation

Définir operator fun get permet de lire une valeur avec la syntaxe entre crochets : obj[i].

class Row(val cells: List<String>) {
    operator fun get(i: Int) = cells[i]
}

fun main() {
    val r = Row(listOf("a", "b", "c"))
    println(r[1])
}

Écrire avec set

operator fun set permet l’affectation : obj[i] = value. Le dernier paramètre est la valeur.

class Grid {
    private val data = IntArray(3)
    operator fun get(i: Int) = data[i]
    operator fun set(i: Int, value: Int) { data[i] = value }
}

fun main() {
    val g = Grid()
    g[0] = 42
    println(g[0])
}

Indexation avec plusieurs arguments

get et set peuvent accepter plusieurs indices, ce qui convient parfaitement aux matrices.

class Matrix {
    private val d = Array(2) { IntArray(2) }
    operator fun get(r: Int, c: Int) = d[r][c]
    operator fun set(r: Int, c: Int, v: Int) { d[r][c] = v }
}

fun main() {
    val m = Matrix()
    m[1, 1] = 9
    println(m[1, 1])
}

Indexer avec des clés qui ne sont pas des Int

Les paramètres d’indexation peuvent être de n’importe quel type, ce qui permet un accès semblable à celui d’une map.

class Settings {
    private val map = mutableMapOf<String, String>()
    operator fun get(key: String) = map[key]
    operator fun set(key: String, value: String) { map[key] = value }
}

fun main() {
    val s = Settings()
    s["theme"] = "dark"
    println(s["theme"])
}

L’opérateur invoke

Définir operator fun invoke permet d’appeler une instance comme une fonction : obj().

class Greeter(val name: String) {
    operator fun invoke() = "Hello, $name"
}

fun main() {
    val g = Greeter("Sam")
    println(g())
}

invoke avec des arguments

invoke peut accepter des paramètres, ce qui permet à l’objet de se comporter comme une fonction paramétrée.

class Multiplier(val factor: Int) {
    operator fun invoke(x: Int) = x * factor
}

fun main() {
    val triple = Multiplier(3)
    println(triple(5))
}

Objets appelables avec état

Comme l'objet conserve un état, invoke peut construire des objets configurables qui se comportent comme des fonctions.

class Accumulator {
    var total = 0
    operator fun invoke(n: Int) { total += n }
}

fun main() {
    val acc = Accumulator()
    acc(5)
    acc(10)
    println(acc.total)
}

Plusieurs surcharges de invoke

Vous pouvez déclarer plusieurs surcharges de invoke avec des paramètres différents.

class Printer {
    operator fun invoke(s: String) = println(s)
    operator fun invoke(n: Int) = println("num: $n")
}

fun main() {
    val p = Printer()
    p("hi")
    p(7)
}

Indexation dans les expressions

L'accès par index se combine naturellement avec d'autres opérations.

class Scores(private val list: List<Int>) {
    operator fun get(i: Int) = list[i]
}

fun main() {
    val s = Scores(listOf(10, 20, 30))
    println(s[0] + s[2])
}

Combiner get et invoke

Un type peut prendre en charge à la fois l'indexation et l'appel, pour offrir une API expressive.

class Lookup(private val data: Map<String, Int>) {
    operator fun get(key: String) = data[key]
    operator fun invoke() = data.size
}

fun main() {
    val l = Lookup(mapOf("a" to 1))
    println(l["a"])
    println(l())
}

Utilisation dans la bibliothèque standard

Les listes utilisent list[i] et les tables associatives utilisent map[key] : ce sont exactement ces opérateurs. Vos types peuvent être tout aussi naturels à utiliser.

fun main() {
    val list = listOf(1, 2, 3)
    val map = mapOf("x" to 9)
    println(list[0])
    println(map["x"])
}

Vérification rapide

Vérifiez votre compréhension de l'indexation et de invoke.

Récapitulatif

Vous avez appris l'indexation et invoke :

  • get implémente obj[i] ; set implémente obj[i] = v.
  • Les opérateurs d'indexation prennent en charge plusieurs clés et des clés qui ne sont pas de type Int.
  • invoke permet d'appeler des instances comme des fonctions, avec ou sans arguments.
  • Les collections standard utilisent exactement ces opérateurs.
class Box {
    private val m = mutableMapOf<String, Int>()
    operator fun get(k: String) = m[k]
    operator fun set(k: String, v: Int) { m[k] = v }
}

fun main() {
    val b = Box()
    b["x"] = 5
    println(b["x"])
}

Questions Fréquemment Posées

La leçon « Indexation et invocation » est-elle gratuite ?

Oui — le texte complet de « Indexation et invocation » 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 « Indexation et invocation » ?

get, set et invoke 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 3 sur 4.

Combien de temps prend la leçon « Indexation et invocation » ?

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