persone che ho sentito consigliano che si dovrebbe sempre utilizzare il Iterator pattern per controllare i cicli piuttosto che un'eccezione (che è come è fatto in Python iterators) o utilizzando il Sentinel pattern, per cui uno speciale, il valore sentinella (spesso null
) viene restituito indica la fine dell'iterazione.C'è qualche ragione per evitare il pattern sentinella in Java?
Le migliori pratiche sconsigliano il modello sentinella? Se è così, perché? (a parte il fatto che non funziona con la sintassi foreach
in Java 1.5).
Edit: Esempio di codice 1 - Sentinel modello
Reader r = ...;
for(int val = r.read(); val != -1; val = r.read()) {
doSomethingWith(val);
}
Esempio di codice 2 - Iterator modello
for(Iterator<Thing> it = getAnIterator() ; it.hasNext();) {
Thing t = it.next();
doSomethingWith(t);
}
Si potrebbe voler mostrare un esempio di ciascuno dei tre schemi di loop che stai chiedendo. –
Non ha incluso il modo Python, sollevando eccezioni per il controllo del flusso non è qualcosa che sto suggerendo seriamente. –
+1 solo per l'I/O per ciclo - non l'ho mai visto fare in quel modo. –