Domanda Scala: più oggetti e classi in un singolo file o ogni oggetto / classe il proprio file


Recentemente ho iniziato a programmare in Scala, provenendo da Python e Java. Mi chiedevo quale sia il modo corretto o il modo accettato di definire oggetti / classi in Scala. Scala supporta, proprio come python, per aggiungere diverse definizioni di classi o oggetti in un singolo file.

Quindi, puramente da una prospettiva di struttura accettata, ogni oggetto deve essere definito nel proprio file o è possibile sceglierlo tu stesso?


25
2018-06-23 12:09


origine


risposte:


C'è un capitolo nel funzionario Scala Style Guide su questo. È abbastanza chiaro di per sé, ma lascerò solo alcune citazioni qui.

L'idea centrale è:

Di norma, i file devono contenere una singola unità di compilazione logica. Con "logico" intendo una classe, un tratto o un oggetto.

Esiste, naturalmente, un'eccezione per gli oggetti companion:

Un'eccezione a questa linea guida è per le classi o i tratti che hanno oggetti complementari. Gli oggetti Companion devono essere raggruppati con la loro classe o tratto corrispondente nello stesso file.

C'è anche il fatto che sealed funziona solo all'interno dello stesso file.

Nonostante quanto detto sopra, ci sono alcune situazioni importanti che giustificano l'inclusione di più unità di compilazione all'interno di un singolo file. Un esempio comune è quello di un tratto sigillato e di diverse sottoclassi. A causa della natura delle superclassi sigillate (e dei tratti), tutti i sottotipi dovere essere incluso nello stesso file.

Nella maggior parte dei casi, le classi di casi sono semplici contenitori di dati e possono essere raggruppati insieme.

Un altro caso si verifica quando più classi formano logicamente un singolo gruppo coesivo, condividendo concetti fino al punto in cui la manutenzione viene notevolmente servita contenendoli all'interno di un singolo file.

Infine, esiste una convenzione di denominazione per file Scala multi-unitati esenti:

A tutti i file multi-unità devono essere assegnati nomi camelCase con una lettera minuscola.

Quindi: metti le tue classi e oggetti Scala in file separati, a meno che non rientrino in una delle tre eccezioni menzionate.


35
2018-06-23 12:38



In Scala, è perfettamente valido avere più classi all'interno di un singolo file FINTANTO CHE sono strettamente correlati.

Ma non tutte le lingue incoraggiano questa convenzione, e penso che valga la pena considerare la ragione.

Personalmente non mi piace quando la gente inserisce più classi in un singolo file perché rende più difficile trovare una definizione di classe. Questo è amplificato nelle revisioni del codice in cui voglio essere in grado di rivedere il codice il più rapidamente possibile senza scavare.

Contro

  1. Le revisioni del codice mi impongono di fare più ricerche per trovare una classe
  2. Non mi piace doverlo grep per trovare un file
  3. Una convenzione di denominazione coerente mi consente di utilizzare il mio editor di testo o gli strumenti IDE per aprire rapidamente un file in base al nome della classe

Professionisti

  1. Come ha sottolineato Jesper, alcuni scenari lo richiedono
  2. Le classi di supporto / i tratti sono mantenuti nascosti per minimizzare il "rumore" della struttura dei file

9
2018-06-23 12:16



A volte devi mettere diversi tratti, classi o oggetti in un unico file sorgente, in particolare quando stai usando sealed tratti. UN sealed tratto può essere esteso solo all'interno dello stesso file sorgente.


4
2018-06-23 12:21