Sem Elvis Operator? Crie um!

Meu querido amigo @lucastex Postou sobre Elvis operator em Groovy. Ele também me perguntou se Scala tinha este operador. E eu disse: Não, mas eu posso criar agora. E assim fiz:

implicit def toRockStar[B](v : B) = new { def ?: (opt: => B) : B =
                                           if (opt == null) v else opt}

Se voce observar bem neste Post, eu criei o operador % aplicável a Strings para facilitar a configuração de alguns parâmetros em uma conexão com o RabbitMQ.

Então, para usarmos nosso Rock Start Elvis operator fazemos assim:

scala> val name : String = null
name: String = null

scala> val l = name ?: "Lucas"
l: java.lang.String = Lucas // resultado deve ser Lucas

scala> val p = l ?: "Paulo" // Resultado Deve ser Lucas
p: java.lang.String = Lucas

A variável imutável p só deve receber o valor Paulo se a variável l não tiver sido atribuído a uma String. O Elvis aqui serve para qualquer tipo, pois foi construído de forma genérica com tipos parametrizados (ver o [B]).

Em Scala os operadors aritiméticos também são funções e não operadores da linguagem. Logo, existe a possibilidade de criação de qualquer operador com o nível de complexidade necessário para resolver o seu problema.

Foi um post curto, e um bate bola com o Lucas. Tento usar o público dele e de outras linguagens para atrair a atenção para Scala, uma linguagem sem dúvida promissora. ;)

Com Scala é assim, não espere a linguagem criar um operador interessante como esse, simplesmente o faça.


About this entry