Dopo aver scoperto le espressioni lambda, e il loro uso come funzioni anonime, mi sono trovato a scrivere un sacco di eventi più banali come questi:Le migliori pratiche di utilizzo di espressioni lambda per i gestori di eventi
txtLogin.GotFocus += (o, e) =>
{
txtLogin.Text = string.Empty;
txtLogin.ForeColor = SystemColors.ControlText;
};
txtLogin.LostFocus += (o, e) =>
{
txtLogin.Text = "Login...";
txtLogin.ForeColor = SystemColors.InactiveCaptionText;
};
ho anche allontanato da gestori di eventi che ha appena chiamata altre funzioni, la loro sostituzione con piccole lambda, che fanno la stessa:
backgroundWorker.DoWork += (o, e) => DatabaseLookup.Open(e.Argument as string);
ho trovato alcune domande simili affrontare performance concerns e sottolineando che si can't remove them, ma non ho trovato qualsiasi affrontare la semplice domanda di è una buona idea?
L'uso di lambda è considerato una buona forma oppure i programmatori di più esperienza non lo considerano? Nasconde i gestori di eventi in luoghi difficili da trovare, oppure esegue il codice di un servizio riducendo il numero di gestori di eventi banali?
Restringersi a un singolo punto di uscita è una ricetta per i disastri di leggibilità, IMO. Se conosco il risultato di un metodo dopo una riga (ad es.perché è un caso speciale), quindi non c'è motivo di far seguire al lettore il resto del metodo per arrivare al punto di uscita. –
Sono d'accordo, preferirei sempre un'uscita anticipata. Ma so che alcune persone si oppongono a questo. –
La mia filosofia è che spesso è preferibile evitare di uscire dalle funzioni tra la prima istruzione che ha effetti collaterali e l'ultima di tali istruzioni, eccetto che restituire un valore da un blocco 'try' può essere più pulito dell'impostazione di una variabile all'interno del bloccare e restituirlo dall'esterno. – supercat