quinta-feira, 10 de setembro de 2009

Eliminando ifs encadeados com scala.

Estava lendo o seguinte post do meu amigo eliezer sobre eliminar if encadeados e pensei: Como seria um código para resolver esse problema em Scala.

Utilizando firstClass functions e placehoder syntax criei o seguinte código:

object StringUtils {                                                   
  def format( action: String => String, value: String ) = action(value)
  def removeBlanks = { (_:String).replaceAll( " ", "") }                       
  def onlyNumbers = { (_:String).replaceAll( "\\D", "" ) }             
}

Dá pra ver que o código fica bem mais enxuto e a responsabilidade fica toda dentro do objeto singleton StringUtils. O código cliente fica bem interessante também:

StringUtils.format( StringUtils.removeBlanks, "Ola enfermeira" )

O código retorna Olaenfermeira

Legal né =)

Se você tem alguma idéia melhor por favor compartilhe ela aí embaixo.

Um comentário:

andre goncalves disse...

mto bom o post.
essa mistura de funcional com orientacao a objtos é bem interessante.
olha um exemplo em groovy:

class StringUtils{
def static format = { x, y -> x( y ) }
def static upper = { x -> x.toUpperCase() }
}
StringUtils.format( StringUtils.upper, 'aaaa' )