Recentemente ho trovato un pezzo di codice simile a questo (all'incirca C #):
public bool ValidateStuff(ref ArrayList listOfErrors, Stuff thingsToValidate)
{
if (!thingsToValidate.isValid() )
{
errors.add("New error!");
}
}
ArrayList errors = [];
bool valid = ValidateStuff(ref errors, stuffToValidate);
La cosa fondamentale è la parola chiave "ref" - non c'è bisogno di usare quella parola chiave data la funzionalità qui, e quando ho chiesto perché era lì mi è stato detto che era stata aggiunta solo come una sorta di avvertimento che il Il parametro errori è manipolato dal metodo, non è puramente utilizzato come input.
Questo mi è sembrato subito sbagliato ( ref ha uno scopo, e qui non viene usato secondo il suo scopo), ma l'idea di forzare (dato che hai per usare ref quando si chiama il metodo) un promemoria di utilizzo leggermente controintuitivo sembrava ragionevole, e non potevo immediatamente pensare a un modo migliore, a parte l'uso liberale dei commenti. Cosa ne pensi?
Credito extra: come potrebbe essere migliore questo metodo? Forse semplicemente restituendo un nuovo Elenco di errori che viene aggiunto alla Lista principale nel codice chiamante? Fornendo due metodi, uno per il test e uno per gli errori? O va bene così com'è?