for-loops vs x.Times (...) metodi di estensione

0

Usando C # come esempio, le estensioni su IEnumerable per consentire codice come collection.Each(i => i.DoStuff) piuttosto che un foreach loop sono generalmente disapprovate, principalmente perché non seguono le convenzioni LINQ di essere funzionali, in quanto le funzioni prendono le dichiarazioni piuttosto che le espressioni, scritte per avere effetti collaterali.

La stessa cosa si applica a un'estensione per consentire il codice come ...

10.times(() => ThingIWantToDo10Times())

Da una parte è ancora chiaramente non funzionale, ma dall'altra non è un'estensione su IEnumerable .

Un'estensione come questa potrebbe essere disapprovata per le stesse ragioni?

    
posta GoatInTheMachine 27.06.2018 - 17:39
fonte

1 risposta

1

La prima cosa da notare è che il secondo esempio di codice è dettagliato e quindi nasconde uno dei principali vantaggi del metodo di estensione. Può essere espresso come:

10.times(ThingIWantToDo10Times);

(ma rendilo Times , per favore. I metodi C # sono PascalCase, non CamelCase.)

L'indecisione di una tale espressione è un grande vantaggio. Ma hai ragione, a molte persone non piace perché usa un modello funzionale per creare effetti collaterali. Vale la pena leggere questo post di Eric Lippert, dato che entra in molti dettagli sul perché possa essere visto come sbagliato .

Se, dopo averlo letto, preferisci ancora l'idea di utilizzare un metodo di estensione, quindi fallo. Dopo tutto, sono solo opinioni ...

    
risposta data 27.06.2018 - 17:57
fonte

Leggi altre domande sui tag