Delphi non ha Lambda Expressions e io sono un programmatore Delphi, cosa mi sto perdendo?

4

Sono quasi indifferente su ciò che espressione lambda è , ma ho un Difficoltà a credere che non potrei definire qualcosa con lo stesso effetto in Delphi (anche se con il 900% di codice in più).

Qual è il grande vantaggio delle espressioni lambda, cosa mi sto perdendo e c'è qualcosa con i miglioramenti post-lancio di Delphi 2009 che si avvicina a emulare i poteri di C # in questo senso?

    
posta Peter Turner 04.01.2011 - 19:27
fonte

4 risposte

5

Diciamo che in Delphi hai metodi in linea anonimi come delegate in questo codice C #:

var squared = Enumerable.Range(0, 100)
    .Select(
         delegate(int a)
         {
             return a * a;
         }
    );

Quindi i lambda sono semplicemente un modo più breve di scrivere quello:

var squared = Enumerable.Range(0, 100)
    .Select(
         a => a * a
    );

I frammenti di codice sopra sono identici dal punto di vista IL.

    
risposta data 04.01.2011 - 19:53
fonte
6

Non ti stai perdendo nulla, davvero. Lambdas è solo una forma diversa di metodi anonimi, che sono stati introdotti in Delphi 2009, con una sintassi molto minimale che li rende criptici e difficili da leggere. (Nessuna intestazione di funzione di cui parlare, ad esempio, il che significa che non puoi dire il tipo di variabili con cui stai lavorando guardando il codice.)

    
risposta data 04.01.2011 - 19:38
fonte
4

I have a hard time believing that I couldn't finagle something to the same effect in Delphi (albeit with 900% more code).

Bene ... Questo è quello che ti stai perdendo - essere in grado di realizzare certe cose senza scrivere una quantità enorme di impianti idraulici.

È lo zucchero sintattico, nello stesso senso in cui cose come loop limitati, funzioni e tipi definiti dall'utente sono zucchero: fornisce un mezzo sia per la semplificazione che per la scrittura di codice che esprime chiaramente ciò che stai facendo senza impantanarsi i piccoli dettagli di come stai lottando contro la CPU per farlo davvero.

    
risposta data 04.01.2011 - 19:34
fonte
2

Il "900% in più di codice" che menzioni nella tua domanda fa una differenza ancora più grande di quanto pensi. Significa in pratica che devi fare a meno della funzione in questione, perché chi scrive il 900% in più di codice? Ti darò un esempio. Un paio di anni fa, ho scritto un parser SQL in Haskell usando una libreria di parser combinator chiamata Parsec. Un collega mi ha chiesto perché non ho usato C # per scriverlo. La mia risposta è stata che se avessi dovuto scriverlo in C #, sarebbe stato venti volte più codice o più, quindi non l'avrei scritto affatto.

    
risposta data 04.01.2011 - 19:55
fonte

Leggi altre domande sui tag