Stili Java in conflitto all'interno di una squadra


12

Faccio parte di un team di sviluppo Java con una scadenza di 6 settimane. Ciò richiede di scrivere molto rapidamente molto codice. Tuttavia, il nostro team di sviluppo ha diversi stili di codifica. Tutto, dalle convenzioni sui nomi ai metodi di astrazione differisce tra il nostro team. Qualcuno sa di alcuni documenti che dettano "standard" per Java?

Per chiarire, mi chiedevo se ci fosse un'organizzazione che avrebbe dettato la giusta convenzione di denominazione per variabili e funzioni, ad esempio. Ciò è fondamentale in quanto con una scadenza così breve che non possiamo permetterci di passare il tempo a cercare di comprendere il reciproco codice.

Risposte:


18

Esiste una simile organizzazione: Sun / Oracle stessa. Il documento si chiama Convenzioni del codice per il linguaggio di programmazione Java e descrive la maggior parte delle convenzioni necessarie. Basta che tutti siano d'accordo a leggerlo e seguire i suoi consigli.


3
Questo è uno standard ben noto, ma non abbiate paura di deviare da esso dove la squadra è d'accordo. Essere limitati a 80 caratteri in larghezza può essere doloroso per esempio.
Martijn Verburg,

1
@MartijnVerburg il limite può indurre il refactoring in metodi e classi per evitare un rientro profondo.

Questa è una convenzione e potrebbe essere un ragionevole ripiego, se non riesci a trovare un accordo, ma come dice il nome, non impone: è una convenzione.
utente sconosciuto il

@userunknown Hai ragione. Non sono nemmeno d'accordo con tutte le convenzioni. Ma è un buon compromesso dato il periodo di tempo del PO.
Andres F.

8

Mi sto davvero concentrando sulla risposta di Andres e mi concentro sull'aspetto formattando uniformemente il codice java.

Se si utilizza Eclipse, è possibile impostare il suo formattatore Java per formattare automaticamente allo standard Java. Il formatter di Eclipse ha anche altre impostazioni utili, come i caratteri per riga (ovvero quanti caratteri per riga prima che si interrompa su una nuova riga) e molti altri. La standardizzazione dei caratteri per riga semplifica la diffusione del codice scritto da diversi sviluppatori senza avere molte differenze solo dalla spaziatura e dalle interruzioni di riga.

Infine, con Eclipse, dopo aver impostato tutte le impostazioni desiderate, quindi esportare il formatter come file che può essere importato da ogni membro del team. Quindi, se stai usando Eclipse, ti consiglio vivamente di esplorare tutte le opzioni che si formatteranno automaticamente e modificheranno il codice per te, quindi condividendo le impostazioni con l'intero team.

Suppongo che gli altri principali IDE Java (IntelliJ e Netbeans) abbiano una funzione simile per esportare le impostazioni del formato.


2
+1 Buona risposta anche! Puoi anche installare un plugin come Checkstyle e farti avvisare quando rompi le convenzioni.
Andres F.

Lo facciamo anche noi. Preferenze -> Java -> Editor -> Opzioni di salvataggio e abilita il formato al salvataggio. Il motivo principale è garantire che le righe di origine interessate da un formato avvengano il più presto possibile per rendere la cronologia dei controlli di versione il più pulita possibile (di nuovo diff).

Sì, ho iniziato a farlo anche di recente. L'unica cosa di cui non sono sicuro è che ho selezionato l'opzione "Rimuovi variabili private non utilizzate" sull'opzione di salvataggio. Quindi, mentre sto facendo TDD, trovo che spesso le mie variabili scompaiono perché il codice è stato salvato prima di usarle ... ma a parte questo, questa opzione è stata fantastica.
Sam Goldberg,

6

Questo [diversi stili di codifica] è fondamentale in quanto con una scadenza così breve che non possiamo permetterci di passare il tempo a cercare di comprendere il reciproco codice.

In realtà. Non è fondamentale.

Dopo 30 anni come consulente, ho letto un sacco di codice da molti clienti. È importante notare che ogni cliente (e spesso all'interno dell'organizzazione di un cliente) ha stili diversi.

Dopo aver letto tanti stili, ho imparato questo.

Lo stile non conta

Concentrati sulla scrittura di codice che funziona sempre e sulla scrittura di unit test che dimostrano che funziona sempre.

Dopo aver spedito il codice di lavoro, puoi vestirlo se hai esaurito i bug da correggere e i miglioramenti da installare.


forse non importa, ma è anche molto bello da avere e molto facile da fare.
Kevin,

1
Lo stile non ha importanza, ma la coerenza è importante. Lo stile incoerente rende la manutenzione del software molto più difficile.
Jesper,

5
@Jesper: "Lo stile incoerente rende la manutenzione del software un po 'più" difficile ". Non è molto più difficile da ogni tratto. Il codice opaco, difettoso e difettoso è molto più difficile da mantenere. Gli stili incoerenti nel codice di lavoro sono solo stili incoerenti. Alcune persone hanno un accento e devi ascoltare più attentamente. Gli stili incoerenti sono poco più che un diverso accento regionale (o nazionale).
S. Lott,

1
Stile non importa in senso globale, ma lo stile coerente all'interno di un unico team non importa. Non creerà o spezzerà un progetto, ma se è altrettanto facile essere coerenti che non farlo, perché non andare avanti ed essere coerenti? Il tuo codice sarà almeno leggermente migliore.
Bryan Oakley,

1
"Il tuo codice sarà" al meglio "leggermente migliore". E sì, è quasi a costo zero e sicuramente a rischio zero. Ma. La copertura del test al 100% è molto, molto più preziosa di questa coerenza.
S. Lott,

2

Non preoccuparti di scegliere uno standard universale perfetto. Tutto ciò di cui hai bisogno è che il tuo team accetti uno standard e si attenga ad esso. Crea il tuo se lo desideri, ma sii coerente.

La coerenza migliora la collaborazione, la collaborazione migliora il codice.

Anche se l'effettiva coerenza non aiuta, il fatto che la tua squadra abbia lavorato insieme per raggiungere un accordo è una buona cosa. La loro incapacità di concordare qualcosa di semplice come le convenzioni di codifica afferma che potrebbero esserci problemi di lavoro di squadra più grandi in agguato sotto la superficie.


0

Il Sun Java CC sopra menzionato non ha solo 13 anni e alcune delle sue regole sono obsolete (come 80 caratteri per riga), ma non definisce convenzioni di denominazione, tranne quelle più generali (involucro di cammello per classi, capitelli di blocco per variabili finali statiche e simili).

Devi definire i tuoi standard per diversi tipi di classi, come DAO, EJB, entità, qualunque cosa tu usi. Sun Java CC è come una classe base astratta pensata per l'estensione :)


Sono d'accordo che i Java CC di Sun siano un po 'vecchi, ma è solo inteso come punto di partenza. Presumo che l'OP non abbia molto tempo da perdere nel definire il proprio CC, o l'avrebbe detto! (A proposito, dove attualmente lavoro usano un plug-in Sonar configurato per imporre il limite di 80 caratteri - quindi questa regola è ancora viva e attiva in alcuni negozi).
Andres F.

Oltre ad altri motivi, la leggibilità è un fattore. Dover scansionare una lunga distanza attraverso una linea è molto meno efficiente della scansione verso il basso. Con un codice ben formattato è possibile eseguire rapidamente la scansione di codice irrilevante.
BillThor,

Se stai riscontrando problemi con 80 caratteri per riga, o hai identificatori incredibilmente lunghi o stai mettendo illeggibilmente molto su singole righe. Il primo è sciocco (non riesci a distillare la sostanza in meno di quello?) E il secondo è un'indicazione di un urgente bisogno di refactoring. La formattazione automatica al salvataggio è ottima da allora non dovrai più preoccuparti della formattazione; il software lo gestisce per te.
Donal Fellows il

@DonalFellows Sì, al giorno d'oggi, il limite di 80 caratteri è lì per ricordarti di refactoring, non a causa di schermi terminali piccoli.
Andres F.

0

Come menzionato da altri qui, puoi cercare online una delle poche famose "guide di stile" per Java e convincere tutti i membri del team a attenersi a loro. Alcuni strumenti di controllo del codice nel tuo IDE preferito potrebbero aiutarti a ricordare quando non lo fai.

Tuttavia, a volte è coinvolta la politica. Sono già una volta in una situazione in cui lo sviluppatore più anziano del team continua a fare a modo suo anche dopo che qualcuno ha menzionato la necessità di standardizzare. In una situazione del genere, forse è meglio osservare il suo stile di codice e seguirlo, poiché probabilmente ha la maggior conoscenza della base di codice e dei requisiti e potresti non voler perdere tempo a fare un passo avanti, anche se è difficile. Il che è ciò che il resto di noi ha fatto in quella particolare situazione e io lo seguo con riluttanza.

Quindi è importante considerare anche la tua situazione.


Che paese è questo? Sembra una cosa culturale.

@ ThorbjørnRavnAndersen Intende dire che le persone possono essere resistenti ai cambiamenti quando "quello che hanno fatto per così tanto tempo". La politica in questo senso è solo "politica d'ufficio"
Robotnik,

0

Lo zio Bob mostra uno stile di codifica più moderno e attuale nel suo libro "Clean Code". Purtroppo non contiene alcun elenco di articoli. Devi leggerlo. Si dice che per vedere le sue convenzioni, devi leggere il suo codice. Lo zio Bob è senza dubbio una specie di istituzione. Il libro è comunque un'ottima lettura, quindi anche se è troppo tardi per leggerlo ora, leggilo al più presto.


0

Ciò che conta davvero nel codice è bassa complessità ciclomatica, portata ridotta, elevata coesione e scelta di identificatori espressivi. Detto questo, il codice diventa facile da capire e tale codice è buono.

Ti suggerisco di esaminare la programmazione spartana .

La maggior parte degli standard di codifica ti dice come far apparire grazioso il codice scritto male e la maggior parte delle discussioni sullo "stile di codifica" riguarda in realtà la formattazione. La formattazione del codice consiste nel rappresentare visivamente la struttura del codice. È banale e automatizzabile e non ha praticamente nulla a che fare con lo stile di codifica, perché lo stile di codifica non riguarda il modo in cui rappresenti la struttura del codice, ma il modo in cui strutturi il codice.
Ci sono anche molte guerre di religione sulle convenzioni di denominazione, anche se in realtà sono solo un trucco per aggirare il design scadente. Un nome è buono, se dice cosa significa. Più piccoli e chiari sono i tuoi ambiti, più facile è scegliere un tale nome.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.