Conceitos de Programação Funcional com Scala


Quando falamos em programação em geral, vários paradigmas costumam aparecer. Ultimamente a programação funcional tem sido mencionada bastante em conferências e artigos. O fato é que hoje poucos desenvolvedores conhecem de fato esse paradigma. O mercado é focado na abordagem imperativa (orientada a objetos), entretanto, vários conceitos utilizados em API’s e bibliotecas que são escritas OO, vem da programação funcional. Programação funcional é um paradigma onde o código é composto de várias expressões (pode se pensar em funções que recebem um valor e sempre retornam algum valor) e não declarações, evitando ao máximo a mudança de estado de objetos e variáveis mutáveis. Então, ao utilizar Scala, você deve programar “orientado a expressões”.

No Scala, alguns blocos de controle como if retornam valores, por exemplo:

fidelis

Como pode ver, if no scala é uma expressão. Similar ao if utilizado em linguagens como Java, que utiliza o operador “? :” para retornar valor. Um conceito chave é perceber que não é necessário utilizar a palavra “return”. Uma expressão sempre vai retornar um valor. Enquanto em Java é pratica comum utilizar return para qualquer método. Em Scala, a ultima instrução da função será a instrução que retornara o valor. Abaixo um exemplo.

Java

fidelis2

Aqui definimos a função para mapear um código de erro a uma mensagem. Em Scala match é equivalente ao “switch” do Java. Caso não encontre, ele vai cair no “case _” que seria equivalente ao “default”.

Scala

fidelis3

Percebemos que ao invés de utilizar “var” foi usado “val”. Isso faz com que o “result” se torne imutável. E por segundo, ao utilizar match (que é uma expressão equivalente ao switch case) por padrão irá retornar o valor que cair no case. Logo, reduzimos o tamanho e complexidade do código e aumentamos a imutabilidade do programa.

Imutabilidade é um dos fundamentos da programação funcional e uma boa prática para orientação a objeto utilizando JVM. Como regra geral, criar classes imutáveis reduz o número de possíveis bugs em runtime.

A vantagem disso é que facilita para o programador avaliar o resultado de expressões e expressões concorrentes. Scala não é uma linguagem totalmente funcional, ela incorpora elementos de OO como classes, objetos, polimorfismo. A linguagem já está na versão 2.11.8 e roda em cima da JVM que por si só traz grandes otimizações para o código.

Caso tenha se interessado, recomendo muito o livro “Scala in Depth”, e um curso disponibilizado gratuitamente pelo portal Coursera.

Bruno Fidelis

Estudante de ciência da computação. Atualmente trabalha como desenvolvedor web na KingHost. Gosta de estudar novas tecnologias e criar soluções inteligentes a partir delas.
Bruno Fidelis

Últimos posts por Bruno Fidelis (exibir todos)

Comentários

comentário(s)