sarò espandere un po 'sul mio commento, che recita:
Ho appena iniziato a utilizzare pigro, e scoprire che è spesso indicativa di cattiva progettazione; o pigrizia da parte del programmatore. Inoltre, uno svantaggio è che devi essere più vigile con le variabili e creare le chiusure appropriate.
Per esempio, ho usato Lazy<T>
per creare le pagine che l'utente può vedere nel mio (sessionless) MVC app. È un wizard guidato, quindi l'utente potrebbe voler passare a un passaggio casuale precedente. Quando viene eseguita l'handshake, viene creato un array di oggetti Lazy<Page>
e, se l'utente specifica come passo, viene valutata la pagina esatta. Trovo offre buone prestazioni, ma ci sono alcuni aspetti ad esso che non mi piacciono, ad esempio, molti dei miei foreach
costrutti ora apparire così:
foreach(var something in somethings){
var somethingClosure = something;
list.Add(new Lazy<Page>(() => new Page(somethingClosure));
}
Vale a dire devi affrontare il problema delle chiusure in modo molto proattivo. Altrimenti, non penso che sia una cattiva prestazione per immagazzinare un lambda e valutarlo quando necessario.
D'altra parte questo potrebbe essere indicativo che il programmatore sia un Lazy<Programmer>
, nel senso che preferiresti non pensare al tuo programma ora, e invece lasciare che la logica corretta valuti quando necessario, come con esempio nel mio caso - invece di costruire quell'array, ho potuto capire solo quale sarebbe stata la specifica pagina richiesta; ma ho scelto di essere pigro e fare un approccio tutto in.
EDIT
E viene in mente che Lazy<T>
ha anche un paio di peculiars quando si lavora con la concorrenza. Ad esempio c'è un ThreadLocal<T>
per alcuni scenari e diverse configurazioni di flag per il tuo particolare scenario multi-thread. Puoi leggere di più su msdn.
Ho appena iniziato a utilizzare Lazy e trovo che sia spesso indicativo di una progettazione errata; o pigrizia da parte del programmatore. Inoltre, uno svantaggio è che devi essere più vigile con le variabili scoped up e creare chiusure appropriate. –
Gleno
@Gleno Perché esattamente la pigrizia di questo programmatore? –
@Gleno, Anton: E, ancora più importante, perché è male? Insegno sempre nei miei corsi di programmazione che la pigrizia è una virtù importante nei programmatori. –