Quando si scrive un'istruzione switch
che deve sempre occuparsi di un insieme di valori noto (si immagini un'enumerazione implicita), mi ritrovo a chiedermi quale dovrebbe essere l'ultima voce nel costrutto. Sto sempre considerando gli stessi 3 approcci, ma mi piacerebbe davvero attenermi a quello che ha più senso e non pensarci più. Le alternative sono descritte di seguito. Per ragioni di discussione, supponiamo che ci siano esattamente 4 opzioni per la "variabile di commutazione".
-
Approccio n. 1 : 4 casi, nessun caso
default
. -
Approccio n. 2 : 3 casi,
default
funge da ultimo caso (+ commento che lo spiega). -
Approccio n. 3 : 4 casi,% caso
default
con un "ShouldNeverHappenException
".
I miei pensieri su questo sono i seguenti:
- Da un lato, poiché
default
è effettivamente un caso che non può essere raggiunto, sembra inutile ingombrare il codice con esso. - D'altra parte, non è corretto non gestire un
default
di considerazioni future-proofing, cioè, se un giorno verrà resa disponibile un'altra opzione (a causa, ad esempio, delle modifiche API al di fuori di il mio controllo), il codice potrebbe reagire in modo errato se viene utilizzato il casodefault
per una delle opzioni previste. - Se l'ultimo caso gestisce uno scenario di errore, potrebbe non essere così male se si tratta del comportamento predefinito (supponendo che non abbia una gestione degli errori a grana fine).
Sulla base del ragionamento di cui sopra tendo a preferire l'approccio 3 rd , ma non sono un ingegnere del software e forse mi manca qualcosa.
Quali sono le migliori pratiche in questo caso?