Sto solo imparando a programmare in scala. Ho una certa esperienza nella programmazione funzionale, come ho nella programmazione orientata agli oggetti. La mia domanda è abbastanza semplice, ma complicata:Scala immutable vs mutable. Qual è il modo in cui si dovrebbe andare?
Quali strutture dovrebbero essere utilizzate in Scala? Dovremmo limitarci a immutabili, ad es. modificando le liste eseguendone iterazioni e inserendone una nuova insieme, oppure optando per le mutabili? Qual è la tua opinione su questo, quali sono gli aspetti prestazionali, aspetti legati alla memoria, ...
Sono probabile che programmassi in uno stile funzionale, ma spesso si espande a un folle sforzo per fare cose che sono fatto facilmente utilizzando mutables. È dipendente dalla situazione, che cosa usare?
Questa domanda è molto generale. Consiglio vivamente di identificare quei problemi che ritenete richiedano uno sforzo "folle" per risolvere funzionalmente e porre domande su di essi. Potresti apprendere nuove tecniche funzionali che rendono lo sforzo ragionevole - o persino più semplice rispetto all'utilizzo di dati mutabili! –
Ci sono altre domande che affrontano questo problema, e questa domanda è troppo vaga o ampia per ammettere una buona risposta, ma in breve: fare ciò che funziona meglio _overall_. Come regola generale, utilizzare una soluzione immutabile se non ci sono gravi inconvenienti; dopo di ciò, preferisci uno mutabile in cui lo stato mutabile non sfugge al contesto locale (cioè il metodo che stai usando), seguito da uno in cui lo stato mutevole è almeno nascosto nella classe (quindi non c'è bisogno di preoccuparsene _except_ quando si utilizzano più thread - e documentare la mancanza di sicurezza del thread). Usa l'immutabilità perché ti aiuta, non quando fa male! –
Nel rapporto facile/insano: la mutabilità è spesso più facile da programmare e eseguire il debug quando si ha a che fare con un singolo thread e diventa faticosamente difficile programmare e eseguire il debug quando si utilizzano più thread. –