La maggior parte dei linguaggi di programmazione moderni non consente più tipi di ritorno (esclusi scenari come i parametri out
di C # o il più recente utilizzo di Tuples
). Questo perché tutte le lingue implementano il concetto di funzioni matematiche, che per un dato numero di parametri di input producono solo un risultato one (per uno non intendo necessariamente un singolo intero ma un singolo output, anche se è un set, un double o qualsiasi altro).
Possiamo superare questo problema con l'uso di objects
o in lingue più vecchie (come C) con un struct
di più valori. Ho visto anche array utilizzati in determinati casi.
Ma intuitivamente, i programmatori sono stati scoraggiati nel creare un metodo che finirà con che richiede di restituire più di un valore; questa è considerata una cattiva pratica .
Ma con tutti gli aggiornamenti nei linguaggi moderni, solo il concetto sopra menzionato in matematica, giustifica perché i metodi dovrebbero restituire un solo valore ? È solo per la leggibilità e per evitare comuni equivoci tra i programmatori, così come le ottimizzazioni del compilatore?
In altre parole, si tratta solo di una limitazione tecnica o no?
EDIT: non ho esempi da mostrare. Personalmente, credo fermamente che le funzioni dovrebbero restituire solo il valore UNO . Ma come spiegate le nuove funzionalità di C # 7.0 che consentono questo concetto? Come ho detto a @DFord nella sezione commenti, se ragioniamo semplicemente come "la cosa giusta" senza alcuna spiegazione, stiamo effettivamente scomunicando queste caratteristiche e chiamando quelli che le hanno create, idioti.
EDIT 2: mi sono perso nella sezione dei commenti. Ci sono quelli che sono per il concetto di un valore di ritorno e quelli che sono contro esso. Se, secondo alcuni di voi, le funzioni matematiche possono restituire più valori , allora perché le lingue sono state progettate per restituire un valore one e il concetto di cui stiamo discutendo è arrivato più tardi? Posso suddividere i miei pensieri in due categorie:
- I metodi dovrebbero restituire solo un valore , quindi l'uso di soluzioni intermedie come
objects
ostructs
risolve solo un problema che non dovrebbe essere presente in primo luogo - Gli sviluppatori devono restituire tutti i valori desiderati , quindi sia il sopra che i parametri
out
di C # eTuples
sono completamente giustificati e non solo zucchero sintattico.
Nota: È completamente diverso per gli sviluppatori trovare alternative per implementare qualcosa che non è supportato (es. restituire un oggetto) e per i linguaggi di programmazione supportarlo ufficialmente fornendo modi per farlo tramite la loro sintassi - rendendolo così "legittimo".