.NET immutable typy (napr string)

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod USAStrykoSam 30. 8. 2019 14:19

Aký to má vlastne zmysel, že sú niektoré typy immutable? Viem že je to dobré kôli referenčnej transparentosti, že referenčne transparentný kód je bezpečnejší a taktiež sa lahšie paralelizuje ale prečo? (Viem že aby bola napŕiklad zmena hodnoty premennej thread safe tak sa musí lockovať)

V .NET je napríklad taký string immutable. Každá "úprava" stringu vracia nový string.

Ale keď si zistíte adresu kde je uložený môžete ho bez problémov prepísať.

1. V čom teda tkvie tá jeho immutablita?

2. Môže takáto zmena stringu spôsobiť nejaký problém? Ak áno tak aký?

To isté čo pre string by malo platiť aj pre ostatné immutable kolekcie (napr v F# list, map, seq, set atď) čo sa stane keď ich nasilu prepíšem? A prečo mi behoevé prostredie bráni urobiť pointer na immutable values keď sa to dá jednoducho obísť?
USAStrykoSam
Kolemjdoucí

Odeslat příspěvekod Wikan 30. 8. 2019 21:29

Většina programů nepočítá s tím, že by se jim string za běhu změnil. A pokud se tak stane, může to vést k nepředvídatelným výsledkům.
Ve svém programu si to klidně dělej jak chceš, ale pokud ho budeš nabízet dál, tak to nedělej. Nebo určitě ne bez dobrého důvodu a toho, že na to ostatní upozorníš.
Wikan
Moderátor
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků