Qual è la filosofia alla base della pubblicazione delle variabili di istanza per impostazione predefinita in Scala. Non dovrebbero renderli privati di default, gli sviluppatori fatti fanno meno errori e incoraggiano la composizione?Qual è la filosofia dietro la quale le variabili di istanza sono rese pubbliche di default in Scala?
Qual è la filosofia dietro la quale le variabili di istanza sono rese pubbliche di default in Scala?
risposta
In primo luogo, si deve sapere che quando si scrive:
class Person(val name: String, val age: Int) {
...
}
name
e age
non sono variabili di istanza, ma accessor metodi getter(), che sono pubbliche per impostazione predefinita.
se si scrive invece:
class Person(name: String, age: Int) {
...
}
name
e age
sono solo le variabili di istanza, che sono private, come ci si può aspettare.
La filosofia di Scala è preferire variabili di istanza immutabili, quindi i metodi di accesso pubblico non sono più un problema.
Privato incoraggia monoliti. Non appena è più semplice inserire funzionalità non correlate in una classe solo perché è necessario leggere alcune variabili che risultano private, le classi iniziano a crescere.
È solo un difetto predefinito e uno dei motivi principali per le classi con più di 1000 righe in Java.
Scala predefinito immutabile, che rimuove un'enorme classe di errori che le persone utilizzano spesso private per limitare (ma non rimuovere, in quanto i metodi propri della classe possono ancora mutare le variabili) in Java.
- con immutabili che sono preferiti in molti luoghi, pubblico non è tanto di un problema di
- è possibile sostituire una val pubblico con getter e setter senza modificare il codice del client, pertanto non è necessario il ulteriore strato di getter e setter nel caso in cui ne hai bisogno. (In realtà si vuole ricevere quello strato, ma non si nota che la maggior parte del tempo.)
- java contro modello di campo privato + setter pubblici e getter non incapsulare molto comunque
(Un ulteriore visualizzare l'integrazione delle altre risposte :)
Uno dei principali driver dietro l'incapsulamento dei campi di Java era la politica di accesso uniforme, ovvero non si doveva sapere o importare se qualcosa fosse implementato semplicemente come campo o calcolato con un metodo su il volo. Il grosso vantaggio di questo è che il manutentore della classe in questione potrebbe passare tra i due come richiesto, senza che sia necessario modificare altre classi.
In Java, questo richiedeva che tutto fosse accessibile tramite un metodo, al fine di fornire la flessibilità sintattica per calcolare un valore se necessario.
In Scala, è possibile accedere a metodi e campi tramite sintassi equivalente, quindi se si dispone di una proprietà semplice ora, non c'è perdita nell'incapsulamento per esporlo direttamente, poiché è possibile scegliere di esporlo come metodo no-arg più tardi senza che i chiamanti debbano sapere qualcosa del cambiamento.
- 1. Le migliori variabili di istanza di Scala
- 2. Qual è la migliore pratica per le API pubbliche C++?
- 3. bisogno di aiuto con le variabili di istanza di Scala
- 4. Le variabili di istanza sono le nuove variabili globali?
- 5. Qual è la logica dietro l'affermazione "PHP non scala (bene)"?
- 6. Le variabili di istanza primitive sono inizializzate di default in Objective-C?
- 7. Qual è la differenza tra le variabili locali e di istanza in Java
- 8. Qual è la cronologia dietro la classe di tipo Functor?
- 9. Qual è la magia dietro CAReplicatorLayer?
- 10. Qual è la logica dietro le definizioni provvisorie in C?
- 11. Le variabili pubbliche non sono VERAMENTE pubbliche in VBA in Moduli
- 12. Qual è la magia dietro Lightstreamer?
- 13. Qual è la struttura dati dietro i set di Clojure?
- 14. In quale oggetto sono memorizzate le variabili globali di Javascript?
- 15. Qual è la differenza tra le variabili di sessione e le variabili globali in php?
- 16. Qual è la differenza tra le azioni di classe e le azioni di istanza in AngularJs?
- 17. Qual è la logica dietro l'algoritmo di divisione di Fourier?
- 18. Qual è la resa di Scala?
- 19. Scoperta in fase di esecuzione quale delle variabili di istanza di classe sono dichiarate __basso
- 20. Esistono variabili di classe finale statiche pubbliche
- 21. Qual è la matematica dietro la ruota dei colori
- 22. Qual è la matematica dietro questa animazione di tipo ray?
- 23. Qual è la matematica dietro la regolazione dell'esposizione su Photoshop?
- 24. Dove sono memorizzate le variabili di istanza in un modulo helper di Rails?
- 25. Qual è la concezione dietro: Tipo - Elemento - Specchio
- 26. Qual è la ragione che sta dietro Object.clone() è protetto
- 27. Qual è la grande idea dietro l'implementazione AOP
- 28. Qual è la matematica dietro la dimensione di sfondo del CSS: copertina
- 29. Perché preferire le proprietà alle variabili pubbliche?
- 30. variabili statiche, qual è la loro durata?
Nel secondo esempio, 'name' e' age' potrebbero anche essere solo parametri del costruttore e non variabili di istanza, a seconda di come vengono utilizzati nel corpo di 'Persona'. –
Sì hai ragione, non volevo complicare la risposta. – paradigmatic