Devo passare tutti gli argomenti ad un metodo esplicitamente nella programmazione funzionale?

3

Mi chiedo se un metodo in un linguaggio di programmazione funzionale debba ricevere tutte le variabili dalla lista degli argomenti, o se sia ok usare le variabili dall'ambito esterno?

Ma lasciatemi spiegare il contesto: l'ambiente in cui lavoro è incentrato sulla programmazione (o meglio: scripting) di Scala in Scala-REPL / Scala-Notebook. Quindi tutti i metodi che definiamo sono solo usati all'interno del REPL, quindi non esiste un ambito "esterno". I metodi che definiamo non vengono mai usati da "outside" come faresti in un normale ambiente OO. Quindi con i metodi intendiamo effettivamente le funzioni ...

Data questa premessa, cerco sempre di definire le mie funzioni (più precisamente: i metodi) per essere autosufficienti, cioè che non si acceda a nessuna variabile dall'ambito esterno. Questo ha il vantaggio di poter riordinare il mio codice, o anche copiare e incollare il mio metodo su un altro script e riutilizzarlo. Lo svantaggio è che l'argomento del metodo-List è saltato in aria e potrebbe diventare molto lungo. In questo caso, normalmente definisco strutture di dati dedicate (ad esempio per le costanti) e le passiamo come 1 variabile.

Quindi la mia domanda è: devo sempre passare tutte le variabili in modo esplicito o (in quali circostanze) è accettabile accedere allo scope esterno?

    
posta Raphael Roth 26.01.2017 - 08:04
fonte

1 risposta

6

Va bene usare le costanti (inclusi i riferimenti ad altre funzioni) dall'ambito esterno. Se si copia la funzione su un altro file e tali simboli non sono definiti, si otterrà un errore del compilatore, come se si fosse dimenticato di passarli come argomento. C'è una minima differenza semantica. Il problema è se quei valori dall'ambito esterno possono cambiare. Quindi dovrebbero essere passati come argomenti.

Ciò che mi preoccupa è che stai dicendo che questo sta rendendo i tuoi elenchi di argomenti molto lunghi. Questo significa che molto probabilmente staresti meglio a suddividere le tue funzioni in pezzi più piccoli, più compatti.

    
risposta data 26.01.2017 - 17:36
fonte

Leggi altre domande sui tag