Dipende dal contesto. Entrambe le opzioni hanno i suoi pro e contro e i compromessi devono essere fatti.
Entrambi contemporaneamente
Libertà di scelta - che consente setChannelOneVoltage(220)
e setVoltage(1, 220)
.
Tutti sono felici!
Ma invita incoerenza . Un programmatore userà il primo, forse inconsapevole della scorciatoia, un altro preferirà quest'ultimo.
Il terzo programmatore arriva, cerca tutti gli usi di setChannelOneVoltage
(per qualche motivo) e potrebbe non capitare che stia trascurando setVoltage(1...
di chiamate.
È un dealbreaker? No, ma dovrebbe essere preso in considerazione. Ogni scorciatoia facoltativa verrà utilizzata in modo incoerente e quindi aggiungerà un po 'di rumore.
Un mio problema è la coesistenza di collection.size() == 0
e collection.isEmpty()
, ad esempio. È rumoroso . Ma dal momento che entrambe le opzioni sono ugualmente valide, l'applicazione di una convenzione coerente è difficile, in quanto si riduce a un gusto in definitiva.
Solo i metodi di scelta rapida
Ora stiamo nascondendo l'implementazione setVoltage(x
e rendiamo accessibile solo tramite le nostre scorciatoie per lo zucchero.
E se fosse necessario impostare rapidamente la tensione su tutti i canali? Invece di un semplice ciclo, ora stai scrivendo:
setChannelOneVoltage(voltage)
setChannelTwoVoltage(voltage)
setChannelThreeVoltage(voltage)
setChannelFourVoltage(voltage)
Va bene, possiamo racchiuderlo in un'altra funzione di scorciatoia: setAllChannelsVoltage
.
E se fosse necessario impostare tutti i canali separatamente dal numero 1? Seguiamo un altro metodo di supporto: setAllChannelsButTheFirst...
A seconda della natura dell'attività, potrebbe essere difficile da mantenere .
Solo il metodo parametrico non elaborato
Ora è difficile trovare tutti gli usi di setVoltage(1...
. Devi ricorrere alla ricerca di testo e fallire in caso di i = 1; setVoltage(i, 220)
o qualche altra delle infinite possibilità.
Rende il codice più astratto e aggiunge al numero di parametri - se è una scelta tra uno o due, non è un grosso problema, ma se il numero di parametri è già passato oltre, dovresti pensarci due volte ogni volta prima di aggiungerne solo uno.
Se ci sono solo 4 canali e non più, setVoltage(int channel
mette il codice a rischio fuori dalle eccezioni , che sei protetto da per design se fornisci solo scorciatoie.
Il codice che contiene setVoltage(5
verrà compilato e arrestato in runtime , ma non verrà generato affatto se contiene una chiamata a setChannelFiveVoltage
poiché il metodo non esiste, rendendo errore molto più facile da individuare.
Per riassumere
Scegliere uno di questi approcci progettuali ci richiede di rispondere a determinate domande.
L'impostazione della tensione sul canale 2 o 3 è un caso speciale a sé stante in modo che potremmo volerlo identificare in codice e distinguere facilmente da tutti gli altri?
È probabile che dovremo iterare su questi canali e impostare la tensione in modo condizionale?
O che dovremmo impostare la tensione di un canale il cui numero ordinale è calcolato o derivato da altri dati?
La versione parametrizzata è stata già in uso per un po 'di tempo? In tal caso l'incoerenza risultante ci colpirà più strong, perché il codice preesistente non utilizzerà le scorciatoie e altri programmatori non saranno utilizzati nemmeno da loro, e rimarranno fedeli a ciò che sanno.
In altre parole - quale dei pro e contro che ho elencato sopra si applica alla tua situazione e fino a che punto? Alcuni possono essere rilevanti, mentre altri non così tanto. Calcola i compromessi per il compito in corso, non c'è nessun proiettile d'argento qui; YMMV.