Perchè usiamo collezioni mutevoli ma stringhe immutabili

-1

In tre piattaforme popolari con cui ho familiarità (.NET, java, python) le stringhe sono immutabili ma le liste sono di default mutabili.

In tutte le lingue esiste un supporto funzionale (linq, stream, list comprehensions), quindi è facile trasformare / filtrare un elenco in un elenco diverso.

Le stringhe e gli elenchi sono abbastanza simili in quanto entrambi sono wrapper di un array e infatti è abbastanza comune in natura vedere le basi di codice in cui la maggior parte degli elenchi viene utilizzata in modo immutabile una volta che sono stati costruiti con, ad esempio, linq.

Comprendo che in tutte e tre le lingue il supporto funzionale non era presente nella versione 1.0 ma resta il fatto che in nessuno dei due linguaggi non esiste una semplice classe supportata di prima classe che offre la garanzia di immutabilità che la stringa fa. Ad esempio, in .NET esiste un pacchetto nuget per l'installazione di questa funzionalità che mi sembra almeno tanto utile quanto una stringa.

Non credo che la maggior parte dei programmatori si sognerebbe di creare una sottostringa di una stringa usando qualcosa di diverso dal metodo di sottostringa incorporato. Qual è la ragione per cui siamo ancora inadempienti alle collezioni mutabili quando sono disponibili le apis funzionali che possono facilmente costruire collezioni immutabili?

    
posta Esben Skov Pedersen 14.08.2017 - 21:23
fonte

1 risposta

1

Non lo siamo:

link

Perché abbiamo una versione mutabile? Anche gli oggetti mutabili hanno valore, se non lo avessimo chiesto perché non abbiamo una lista mutabile.

questo rende interessante una lettura:

link

Affronta alcune delle difficoltà nella creazione di collezioni immutabili

"Other operations of our immutable collections follow this spirit of maximizing reuse. For example, adding an order line to an order with 1,000 order lines will not create an entire new list with 1,001 elements. Instead, it will reuse a large chunk of the existing list. This is possible because the list is internally represented as a tree which allows sharing nodes between different instances."

    
risposta data 14.08.2017 - 23:49
fonte

Leggi altre domande sui tag