Warum mutable kein Subtyp von immutable ist – und umgekehrt
Why isn't mutable a subtype of immutable, or vice versa?
In Programmierforen taucht regelmäßig die Frage auf, warum Sprachen keine Subtyp-Beziehung zwischen veränderlichen und unveränderlichen Datenstrukturen anbieten. Der Artikel erklärt anhand des Liskov-Substitutionsprinzips, dass ein mutable pair nicht als immutable pair verwendbar ist, weil der implizite Vertrag der Unveränderlichkeit verletzt würde – etwa bei Hashing. Umgekehrt fehlen einem immutable pair die Mutatoren. Die Lösung sind getrennte Typen mit ad-hoc-Polymorphismus, etwa Type Classes oder Duck Typing.
Weil der Vertrag besagt, dass das Ergebnis bei jedem Aufruf auf dasselbe Paar gleich bleibt, können wir beispielsweise den Hashwert des Paares sicher berechnen, in einer anderen Datenstruktur speichern und wissen, dass er sich nicht ändert, wenn wir ihn später zur Suche neu berechnen.