English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Função Parcial Aplicada Scala

Funções Scala

A função parcial aplicada Scala é uma expressão na qual você não precisa fornecer todos os parâmetros necessários para a função, apenas parte deles ou nenhum.

No exemplo a seguir, imprimimos as informações de log:

import java.util.Date
object Test {
   def main(args: Array[String]) {
      val date = new Date
      log(date, "mensagem1" )
      Thread.sleep(1000)
      log(date, "mensagem2" )
      Thread.sleep(1000)
      log(date, "mensagem3" )
   }
   def log(date: Date, message: String)  = {
     println(date + "----" + mensagem)
   }
}

Executar o código acima, o resultado será:

$ scalac Test.scala
$ scala Test
Mon Dec 02 12:52:41 CST 2018----mensagem1
Mon Dec 02 12:52:41 CST 2018----mensagem2
Mon Dec 02 12:52:41 CST 2018----mensagem3

No exemplo, o método log() recebe dois parâmetros: date e mensagem. Chamamos o programa três vezes, com valores de date iguais e mensagens diferentes.

Podemos usar funções parciais aplicadas para otimizar o método acima, vincular o primeiro parâmetro date e substituir a lista de parâmetros ausentes com o sublinhado (_) e atribuir o valor da nova função à variável. A modificação do exemplo acima é como segue:

import java.util.Date
object Test {
   def main(args: Array[String]) {
      val date = new Date
      val logWithDateBound = log(date, _ : String)
      logWithDateBound("mensagem1" )
      Thread.sleep(1000)
      logWithDateBound("mensagem2" )
      Thread.sleep(1000)
      logWithDateBound("mensagem3" )
   }
   def log(date: Date, message: String)  = {
     println(date + "----" + mensagem)
   }
}

Executar o código acima, o resultado será:

$ scalac Test.scala
$ scala Test
Tue Dec 18 11:25:54 CST 2018----mensagem1
Tue Dec 18 11:25:54 CST 2018----mensagem2
Tue Dec 18 11:25:54 CST 2018----mensagem3

Funções Scala