Avatar ·

Pourquoi en Kotlin List n'a pas de méthodes add et remove, et Map — put ?

Bonjour à tous ! Je viens de commencer à apprendre Kotlin, je suis passé de Java, et j'ai rencontré une situation incompréhensible. En Java, nous avons l'habitude de travailler avec ArrayList, HashMap et d'appeler tranquillement list.add(), map.put(), etc. Mais en Kotlin, quand j'écris : ```kotlin val myList = listOf(1, 2, 3) myList.add(4) // Erreur : Unresolved reference: add val myMap = mapOf("a" to 1, "b" to 2) myMap.put("c", 3) // Erreur : Unresolved reference: put ``` Le compilateur se plaint que ces méthodes n'existent pas. J'ai essayé d'utiliser mutableListOf et mutableMapOf — là, add et put fonctionnent. Mais pourquoi pour les listOf et mapOf ordinaires elles ne sont pas là ? Est-ce un bug du langage ? Ou est-ce que je ne comprends pas quelque chose dans la philosophie de Kotlin ? Dites-moi, s'il vous plaît, comment travailler correctement avec les collections en Kotlin, si j'ai besoin tantôt d'ajouter des éléments, tantôt simplement de lire des données ? Et que signifient ces "mutable" et "immutable" ? Merci d'avance ! <<>>

Réponse courte : la différence entre collections mutables et immuables

En Kotlin, les collections sont divisées en deux types : immuables (read-only) et mutables. Les fonctions listOf() et mapOf() créent des collections immuables, qui n'ont pas de méthodes comme add, remove ou put. Pour pouvoir modifier une collection, il faut utiliser mutableListOf() ou mutableMapOf(), qui retournent des collections mutables avec ces méthodes. C'est une décision de conception de Kotlin pour favoriser l'immutabilité par défaut et éviter les effets de bord.