Codemountain, Paulo Suzart's Blog

Update Scala, Scala, Scala

with one comment

Como tudo, eu também venho evoluindo em escala nos últimos mêses.

Hoje resolvi re-ler um post chamado Scala, Scala, Scala publicado em Janeiro, e me senti un tanto quanto envergonhado com o que vi. Então resolvi re-escrever os três exemplos assim:

1. Novo: numbers foreach (x => println(x*x))

1. Velho: List[Int](1,2,3,4,5) map (x => Console.println(x*x))

A função map retorna uma lista, e meu interesse é apenas imprimir o resultado. Por isso o uso do foreach.

2. Novo: (for (i <- numbers if i > 3) yield i) foreach println

2. Velho: for (i <- numbers if i > 3) yield Console.println(i)

O resultado produzido, também é o mesmo. A diferença é que no caso do modelo antigo, na verdade não necessitaria de um yield que permite um for retornar um valor relavante. Então para dar uma utilidade ao yield, resolvi aplicar um foreach na lista retornada pelo for e então imprimir cada valor, semelhante ao primeiro exemplo.

3. Novo: println( numbers reduceLeft(_ + _) )

3. Velho: numbers.reduceLeft((x,y) => x + y)

O resultado do modelo velho, na verdade não imprimia o valor da soma entre os membros da minha lista. Agora imprime, e usa placeholder syntax, ou seja, uso o wildcard _ para me referir ao primeiro e segundo argumento pasado para minha literal function _ + _. Para entender melhor, seria importante verificar um pouco da API Scala.

No final, temos um código ainda mais reduzido e mais elegante. Menos repetitivo (e acredite, eu poderia me repetir ainda menos neste código) e mais claro. Aqui sim o estilo funcional foi materializado.

OBS: Oficialmente _ é considerado como um valor em branco que deve ser preenchido, a designação wildcard foi usada neste post para facilitar o entendimento.

Written by paulosuzart

fevereiro 24, 2009 às 4:12 am

Publicado em Java, scala

Uma resposta

Subscribe to comments with RSS.

  1. Tha same “problem” stated, but solved in Haskell:
    > let numbers = [1..5]
    > [x | x <- numbers]
    > [x | x <- numbers, x > 3]
    > sum numbers

    paulosuzart

    agosto 13, 2010 at 4:59 pm


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: