Lo stato mutabile è facilmente evitabile usando oggetti immutabili. Allo stesso modo, le variabili globali sono solitamente la scelta dello sviluppatore (o di un framework mal implementato).
Detto questo, potresti anche voler utilizzare paradigmi funzionali aggiuntivi in lingue non funzionali . Riguarda l'espressività del tuo codice. Se vedi che una comprensione delle liste in Python rende il tuo codice facile, fallo. Se lo trovi più leggibile in un caso particolare, avere una struttura immutabile usata attraverso il concatenamento del metodo, ottimo.
Ma non dimenticare, alcune persone trovano varianti imperative più semplici di quelle funzionali , anche se ciò significa scrivere tre volte il LOC originale e rischiando di introdurre bug sottili. Ancora più importante, alcuni programmatori non capiscono i concetti di base. Molti programmatori C # sono in difficoltà con la valutazione pigra e non sono in grado di spiegare perché, se prendi un IEnumerable<T>
che restituisce una serie di elementi dal database e prima contali il numero di elementi, quindi esegui il ciclo, non ce ne sarà uno , ma due query al database. Non sto nemmeno parlando di monadi e altri concetti che sono per lo più inutilizzati nei linguaggi tradizionali non funzionali.
Inoltre, non preoccuparti di non lavorare con i linguaggi funzionali. Le lingue non funzionali tendono ad essere ispirate negli ultimi anni da quelle funzionali. C # è un ottimo esempio. Python e JavaScript sono altri due linguaggi mainstream che tendono ad introdurre in loro aspetti sempre più funzionali. In sostanza, qualsiasi linguaggio che supporti la valutazione lazy e le espressioni lambda è un buon candidato per il codice in stile funzionale.