Ho il sospetto che non darò un'occhiata a questa domanda, ma sono un programmatore molto esperto e spero che alcuni dei lettori più aperti presteranno attenzione.
Credo che si adatti meglio ai linguaggi di programmazione orientati agli oggetti perché le loro procedure di ritorno del valore (VRP) siano deterministiche e pure.
'VRP' è il nome accademico moderno per una funzione chiamata come parte di un'espressione e ha un valore di ritorno che sostituisce teoricamente la chiamata durante la valutazione dell'espressione. Ad esempio in una dichiarazione come x = 1 + f(y)la funzione ffunge da VRP.
"Deterministico" significa che il risultato della funzione dipende solo dai valori dei suoi parametri. Se lo si chiama di nuovo con gli stessi valori dei parametri, si è certi di ottenere lo stesso risultato.
Significa 'puro' effetti collaterali: la chiamata alla funzione non fa nulla , tranne il calcolo del risultato. Questo può essere interpretato per non significare effetti collaterali importanti , in pratica, quindi se il VRP emette un messaggio di debug ogni volta che viene chiamato, ad esempio, probabilmente può essere ignorato.
Pertanto, se, in C #, la tua funzione non è deterministica e pura, dico che dovresti renderla una voidfunzione (in altre parole, non un VRP) e qualsiasi valore che deve restituire dovrebbe essere restituito in uno outo in un refparametro.
Ad esempio, se si dispone di una funzione per eliminare alcune righe da una tabella del database e si desidera che restituisca il numero di righe che è stato eliminato, è necessario dichiararlo in questo modo:
public void DeleteBasketItems(BasketItemCategory category, out int count);
Se a volte vuoi chiamare questa funzione ma non ottenere il count, puoi sempre dichiarare un sovraccarico.
Potresti voler sapere perché questo stile si adatta meglio alla programmazione orientata agli oggetti. In linea di massima, si adatta a uno stile di programmazione che potrebbe essere (un po 'imprecisamente) definito "programmazione procedurale", ed è uno stile di programmazione procedurale che si adatta meglio alla programmazione orientata agli oggetti.
Perché? Il modello classico di oggetti è che hanno proprietà (alias attributi) e tu interroghi e manipoli l'oggetto (principalmente) attraverso la lettura e l'aggiornamento di tali proprietà. Uno stile di programmazione procedurale tende a semplificare tale operazione, poiché è possibile eseguire codice arbitrario tra operazioni che ottengono e impostano proprietà.
L'aspetto negativo della programmazione procedurale è che, poiché è possibile eseguire codice arbitrario ovunque, è possibile ottenere alcune interazioni molto ottuse e vulnerabili ai bug tramite variabili globali ed effetti collaterali.
Quindi, in parole povere, è buona norma segnalare a qualcuno che legge il tuo codice che una funzione potrebbe avere effetti collaterali rendendola senza valore.