Poiché il tuo esempio utilizza un linguaggio simile a JavaScript (digitato a forma di anatra), la mia risposta sarà specifica per le lingue con dattilografia.
Da un punto di vista dell'usabilità, i parametri sono un po 'più autodocumentanti, quindi restituiscono valori. Se qualcuno stava eseguendo la scansione del codice e ha visto:
function callback( model, rootElement )
{
//TODO: implement editor UI
}
È un po 'più ovvio ciò che dovrebbe essere fatto allora:
function callback( model )
{
//TODO: implement editor UI
// ... okay, where?
}
Inoltre, i programmatori curiosi hanno un po 'più di lavoro con i parametri forniti. Ad esempio, immagina un oggetto Opzioni con 20 opzioni configurabili. Fornendo che l'oggetto Options come parametro (precaricato con valori predefiniti) dia al programmatore la possibilità di penetrare nell'oggetto ed esplorare un po ':
function callback( options )
{
console.log( options );
}
Mentre un callback che deve restituire un oggetto opzioni richiede che il programmatore trovi la documentazione:
function callback()
{
// umm... return what?
}
Inoltre, se vuoi che venga restituito un valore ma l'utente non restituisca un valore, cosa succede? Ho visto molti casi in cui questa condizione ha prodotto errori "non può leggere la proprietà di non definito" ... che di solito interrompe la pagina.
Se all'utente viene assegnato un parametro e gli viene dato il permesso di modificarlo, non dipenderai dal fatto che stiano facendo qualcosa. Ad esempio, forse l'utente vuole solo registrare che qualcosa è successo e il tuo callback è un posto conveniente per farlo. Richiedere che restituiscano qualcosa rende il codice più complicato.
function setOptionsCallback( options )
{
console.log( 'object created' );
}
Versus:
function setOptionsCallback()
{
console.log( 'object created' );
return {};
}
Alla fine, però, la maggior parte di questi problemi può essere superata con una buona programmazione difensiva e una solida documentazione.