Domanda

Qual è la ragione per cui C # o Java hanno lambda? Nessuno dei due linguaggi si basa su di essi, sembra essere un altro metodo di codifica per fare la stessa cosa che C # ha già fatto.
Non sono conflittuale, se c'è una ragione vorrei sapere la ragione. Ai fini della divulgazione integrale sono un programmatore Java con un background C ++ senza esperienza lisp, potrei semplicemente mancare il punto.

È stato utile?

Soluzione

Esistono casi d'uso comuni che richiedono il passaggio (o la memorizzazione) di un blocco di codice da eseguire in seguito. I più comuni sarebbero ascoltatori di eventi. Che ci crediate o no, il seguente bit di codice utilizza un costrutto lambda-ish in Java:

JButton button = new JButton("Push me!");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Pressed!");
    }
});

L'anonima classe interna agisce come una lambda, sebbene estremamente prolissa. Con un po 'di magia di conversione implicita, possiamo scrivere il seguente equivalente in Scala:

val button = new JButton("Push me!")
button.addActionListener { e =>
  println("Pressed!")
}

C # rende questo genere di cose abbastanza facile con i delegati e (anche meglio) i lambda.

Altri suggerimenti

Vedo lambda in C # come una scorciatoia molto comoda per fare delegati. Molto più leggibile per avere il codice proprio lì dove viene utilizzato piuttosto che dover cercare altrove la definizione del delegato.

Zucchero sintattico.

Fornisce un modo conveniente e più leggibile per rappresentare un'idea, in questo caso un metodo da buttare via. Sotto il cofano, il compilatore lo espande in una chiamata di metodo e delegato, ma è la cosa che fa il lavoro, non tu.

Lambdas ti consente di scrivere codice meno dettagliato, più espressivo. Ad esempio, comprensione delle liste ...

A proposito, è in corso il lavoro per esplorare la possibilità di aggiungere chiusure a Java - nel frattempo è necessario utilizzare invece classi anonime (brutte).

C # non sta andando per purezza in una particolare scuola di design del linguaggio (a differenza di Java, che è stato progettato dai Smalltalker come qualcosa di un linguaggio OO puro). C # sta per tutto per tutti, ed è abbastanza bravo. C # si basa sulla raccolta del meglio dei vari stili di programmazione in un linguaggio di alta qualità e ben supportato. Ciò include stili di programmazione procedurali, orientati agli oggetti, funzionali, dinamici, logici, ecc. Ovviamente, finora non ha molto in termini di stili di programmazione dinamici o logici, ma questo arriverà presto (programmazione dinamica in arrivo con C # 4.0).

In caso di C #, i lambda vengono utilizzati internamente per implementare LINQ. Vedi l'articolo L'evoluzione di LINQ e il suo impatto sul design di C #

Lambda consente un codice più leggibile in quanto consente di definire le operazioni più vicino al punto di utilizzo piuttosto che come l'attuale metodo C ++ di utilizzare oggetti funzione la cui definizione è talvolta lontana dal punto di utilizzo. (Questo non include alcune delle librerie boost). Penso che il punto chiave di lambdas sia che consentono un codice più conciso e di facile comprensione.

Offrono una migliore sicurezza utilizzando il multi threading in Java implicando in molti casi il "finale" opzione. Quindi non sei soggetto ad errori per il multitasking.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top