Pergunta

Que razão há para C # ou Java tendo lambdas? Nem a linguagem é baseada em torno deles, parece ser outro método de codificação para fazer a mesma coisa que o C # já fez.
Eu não estou sendo conflituosa, se há uma razão que eu gostaria de saber o motivo. Para efeitos da divulgação cheia Eu sou um programador Java com um fundo C ++ sem experiência lisp, eu pode ser apenas faltando o ponto.

Foi útil?

Solução

Existem casos de uso comuns que necessitam de passar (ou armazenar) um bloco de código a ser executado mais tarde. O mais comum seria ouvintes de evento. Acredite ou não, o seguinte trecho de código usa uma construção lambda-ish em Java:

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

A classe interna anônima está agindo como um lambda, embora um extremamente detalhado um. Com um pouco de magia conversão implícita, podemos escrever o seguinte equivalente em Scala:

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

C # faz esse tipo de coisa bastante fácil com os delegados e (ainda melhor) lambdas.

Outras dicas

Eu vejo lambdas em C # como um atalho muito conveniente para fazer delegados. Muito mais legível para ter o código certo lá onde ele está sendo usado em vez de ter que procurar outro lugar para a definição delegado.

sintática açúcar.

Ele fornece uma maneira conveniente e mais legível para representar uma idéia, neste caso, uma pequena método de usar e deitar fora. Sob o capô, o compilador expande que para uma chamada delegado e método, mas é a coisa a fazer o trabalho, não você.

Lambdas permitem que você escrever menos detalhado código, mais expressivo. Por exemplo, lista compreensões ...

BTW, o trabalho está em andamento para explorar a possibilidade de adicionar tampas para Java -., Entretanto, é necessário usar classes anônimas em vez (feio)

C # não está indo para a pureza de uma escola particular de design de linguagem (ao contrário de Java, que foi projetado pelos Smalltalkers como ser algo de uma linguagem OO pura). C # vai para todas as-coisas-para-toda-pessoas, e é muito bom nisso. C # é baseado em torno de recolher o melhor dos vários estilos de programação em um de alta qualidade, linguagem bem suportado. Isso inclui processual, orientada a objetos, funcional, dinâmico, lógica, etc. estilos de programação. Obviamente, até agora ele não tem muito na forma de dinâmicas ou lógica estilos de programação, mas que virá em breve (dinâmica de programação que vem com C # 4.0).

Em caso de C #, lambdas são utilizadas internamente para implementar LINQ. Veja o artigo A evolução do LINQ e seu impacto sobre o projeto de C #

Lambda de permitir o código mais legível em que eles permitem operações a ser definido mais próximo do ponto de uso, em vez de como o método atual C ++ de usar objetos de função cuja definição é, por vezes longe do ponto de uso. (Isto não é, incluindo algumas das bibliotecas de impulso). Acho que o ponto chave do lambdas é que eles permitem mais conciso e fácil de entender o código.

Eles oferecem melhor segurança usando o multi threading em Java, implicando em muitos casos, a opção "final". Então você não está propenso a erros para multitarefa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top