CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Intérêt de l'immutabilité

boyd-fowler
boyd-fowler
Niveau 10
05 décembre 2014 à 00:45:04

Bonsoir , quelqu'un serait il capable de me l'expliquer concrètement :question: Ca empêche le développeur de faire des conneries au niveau du typage :question:

godrik
godrik
Niveau 30
05 décembre 2014 à 02:05:43

Ca depend du context. Mais en effet c'est souvent une histoire d'optimizatin ou de protection du developpeur contre lui meme.

_skip
_skip
Niveau 10
05 décembre 2014 à 09:05:22

Pas au niveau du typage non, plutôt au niveau du changement de contenu de la donnée. Les objets immutables peuvent être partagés tranquillement entre des threads, être utilisés par des fonctions de hash, être triés ou classés avec l'assurance qu'il va pas soudain il y avoir une modification de leur état qui va rendre les choses incohérentes.

Autre exemple simple, imagine une classe Triangle composée de 3 Points (p1, p2, p3).

Si les points sont immuables, tu es sûr que ton triangle, une fois construit, reste un triangle.

En revanche que peux-tu faire si soudain les points sont modifiés de l'extérieur?

p1 = new Point(10, 30);
p2 = new Point(10, 40);
p3 = new Point(20, 40);

triangle = new Triangle(p1, p2, p3);
p3.setX(10);
p3.setY(30);

p2.setX(10);
p2.setY(30);

Ben "triangle" c'est plus un triangle, et il ne sait pas du tout qu'il a été modifié de l'extérieur.
En revanche avec des points immuables, tu peux obliger l'utilisateur à passer par des méthodes de la classe Triangle s'il veut changer quelque chose. Ou encore mieux, on peut décider qu'il n'a qu'à créer un nouveau triangle et effacer l'ancien.

Des petits malins viendront dire qu'il suffit d'avoir un système d'évènement (Signaux, Observer/Obervable) qui permettrait au triangle de s'abonner à un système de notification et réagir quand un de ses points est modifié, et bien non. Cette façon de programmer qui a été popularisée par les frameworks de binding UI > données est 9 fois sur 10 une mauvaise idée. Elle demande beaucoup plus de tests, crée des références croisées et du code spaghetti difficile à suivre tout en étant au final 1000 fois moins élégante qu'une relation parent-enfant dans laquelle l'enfant est immuable.
L'utilisation judicieuse de l'immuabilité est selon moi l'un des critères qui peut faire sortir du lot un développeur par rapport à un autre, sans exagération.

dark_drow
dark_drow
Niveau 15
05 décembre 2014 à 09:58:32

Super résumé de _skip, par exemple sur iOS, Facebook à du ré-écrire tout le framework de gestion de données (qui est mutable) pour passer sur de l'immutable. Une des raisons qui les ont poussé à faire ça sont les problèmes de lock qu'entrainent la mutabilité (il faut s'assurer que tes data soient thread safe) et qui ralentissait leur app.

boyd-fowler
boyd-fowler
Niveau 10
05 décembre 2014 à 10:28:15

Je m'intéresse à la programmation fonctionnelle et je trouve cette notion assez déroutante pour certaines opérations.

Pseudo supprimé
Pseudo supprimé 06 décembre 2014 à 05:07:11

Ca facilite pas mal de choses comme

- évaluation paresseuse.
- réduction de graphes.
- la copie interchangeable avec la définition d'alias.
- sous-typage en profondeur.
- concurrence déterministe.
- transparence référentielle.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment