Kotlin Lambdas

Expressões Lambda

A expressão lambda ou simplesmente lambda é uma função anônima; uma função sem nome. Essas funções são passadas imediatamente como uma expressão sem declaração. Por exemplo,

 fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )

Quando você executa o programa, a saída será:

 Olá!

Aqui, uma expressão lambda é atribuída à saudação variável. A expressão não aceita nenhum parâmetro e não retorna nenhum valor neste programa.

Então, a função (expressão lambda) é chamada como:

 cumprimento() 

Exemplo: Lambda com parâmetros e tipo de retorno

O programa abaixo tem uma expressão lambda que aceita dois inteiros como parâmetros e retorna o produto desses dois inteiros.

 fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )

Quando você executa o programa, a saída será:

 27

Aqui, a expressão lambda é:

Observe que uma expressão lambda é colocada entre chaves.

Função de ordem superior

Koltin tem um ótimo suporte para programação funcional. Você pode passar funções como argumentos para outras funções. Além disso, você pode retornar uma função de outras funções. Essas funções são chamadas de funções de ordem superior.

Freqüentemente, as expressões lambda são passadas para funções de ordem superior (em vez de uma função típica) por conveniência.

Exemplo: Passando Lambda para Função

Vamos passar uma expressão lambda para uma função de ordem superior. Veja como você pode fazer isso.

 fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )

Quando você executa o programa, a saída será:

 Olá!

Aqui, callMe()está uma função de ordem superior (porque ela assume a função como um parâmetro). O parâmetro de saudação aceita o lambda passado para a callMe()função como:

 saudação: () -> Unidade

O parêntese vazio sugere que a função anônima passada não aceita nenhum parâmetro. E a Unitpalavra - chave sugere que a função anônima não retorna nenhum valor.

Lambdas são freqüentemente usados ​​ao trabalhar com coleções. E, existem várias funções embutidas disponíveis na biblioteca padrão que usam lambdas para tornar nossa tarefa mais fácil. Você verá alguns exemplos aqui:

Exemplo: função maxBy ()

A função maxBy () retorna o primeiro elemento que produz o maior valor da função fornecida ou nullse não houver elementos.

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people.maxBy(( person -> person.age )) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Quando você executa o programa, a saída será:

 Nome da pessoa (nome = Jack, idade = 34): Jack, idade: 34

Aqui, a maxBy()função pega uma lista de objetos Person e retorna o objeto Person com idade máxima.

Palavra-chave it: usada para parâmetro único

No programa acima, a expressão lambda aceita apenas um parâmetro (uma lista de objetos Person). Nesses casos, você pode referir-se ao argumento usando a palavra-chave it.

Você pode substituir

 val selectedPerson = people.maxBy ((person -> person.age))

com

 val selectedPerson = people.maxBy ((it.age)) 

no programa acima.

Exemplo: função maxBy () e startsWith ()

O programa abaixo calcula a idade máxima de um objeto Person começando com a letra S.

Usaremos duas funções de biblioteca maxBy()e startsWith()para realizar esta tarefa. A função starsWith () retorna truese começar com o caractere especificado passado como argumento.

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people .filter ( it.name.startsWith("S") ) .maxBy( it.age ) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Quando você executa o programa, a saída será:

 Nome da pessoa (nome = Shane, idade = 22): Shane, idade: 22

Leituras Recomendadas

  • Fechamentos Kotlin
  • Kotlin com e aplicar

Artigos interessantes...