Nas entrelinhas (Parte 1)

Se você começou a estudar Scala há um tempo, certamente já encontrou em algum código o famigerado _ (chamado de sublinhado, placeholder, underscore, underbar…). Se ficou meio confuso, a confunsão é justificada pelo fato desse símbolo ter quatro usos (pelo menos que eu saiba) em Scala. Podemos encará-lo como uma espécie de caractere coringa, com comportamento distinto dependendo de uma das quatro situações.

O uso mais simples do _ é como coringa para importação de classes em diferentes pacotes. Funciona da mesma forma que o * (asterisco) em Java.

package br.com.verde
import java.util._

class Lab {
 val today = new Date
}

Isso porque o asterisco tem outra finalidade na linguagem de programação criada por  Martin Odersky. Para Scala o asterisco é o operador de referência, usado para declarar ponteiros. Calma, calma! É só brincadeira! Passou, passou! O asterisco em Scala é usado como “operador” (método/função) para multiplicações e para declarar varargs.

O _ também pode ser um coringa em um “casamento” de padrões (pattern matching). Representando um valor qualquer:

object Fatorial {
def f(n: Int): Int = n match {
case 0 = 1
case _ = n * f(n - 1)
}
}

No código acima quando o n for igual a (“casar com”) 0, a função retornará 1. Para qualquer outro valor, retornará o resultado da expressão n * f(n -1).

O terceiro uso do _ já é um pouco mais capcioso. Podemos usá-lo para “iniciar” vars com um valor padrão.

class Lab {
  var numero: Int = _ //zero
  var booleano: Boolean = _ //falso
  var caracter: Char = _ //vazio
  var texto: String = _ //null
  var dinheiro: BigDecimal = _ //null
}

Para cada “tipo” de variável o _ assumirá um valor. Apesar de tudo em Scala ser um objeto, Int, Boolean e Char não receberam  null como valor.

Bem, como diria o suicida otimista ao passar caindo pelo quinto andar do prédio de onde pulou: “Até aqui tudo bem”. Na segunda parte veremos os usos mais complicados do _.

Édson Rocha Patrício

Deixe uma resposta