Category Archives: Linguagens

CCT Março 2008 – DSL com Rhino

Confirmamos mais um evento de alto nível do CEJUG no CCT de Março. Destaque para a excelente palestra ministrada pelo Dr. Vasco Furtado (blog aqui) sobre o Wikicrimes. A última palestra foi do coordenador Hildeberto que voltou da Bélgica para uns dias no Brasil.

[slideshare 309439 cct-dsl-120571477793465-5]

Leonardo Ayres, Rafael Carneiro, Christiano Milfont, Vasco Furtado e Hildeberto Mendonça. Mais fotos do evento.

Currying em Javascript

Uma característica de linguagens funcionais muito usada em Javascript é a técnica de Currying, a grosso modo de explicar, usada para transformar uma função com n argumentos em uma outra função com argumentos simples.

 function pow(i, j) { 
     return i * j;
 }

 function square (k) {
     return pow(k, 2);
 }

 alert(square(6));

Veja nesse exemplo que uma função denominada de pow (que multiplica dois elementos) é usada na função square (que multiplica sempre um elemento por 2) de forma que você tem o uso de primeira pela segunda com uma redução de parâmetros. Essa técnica é usada nas funções de alta ordem como Fold, Map, etc.

Array.prototype.each = function(fn){
	for(var i = 0, len = this.length; i

Exemplo acima usando uma função que aplica outra função para cada elemento de um array.
Essa técnica ficou popular mesmo sendo usada junto a Closure que precisam de funções de callback para processar um resultado de outra função.

Explicando isso em código, teríamos Currying da seguinte forma:

 function atualizar(id) {
     return function(resposta) {
          document.getElementById(id).innerHTML = resposta;
     };
 }

 function processar(msg, fn) {
     fn(msg);
 };

processar('testando currying em ação', atualizar('area'));

Na linha 1, temos a declaração de uma função denominada atualizar que recebe um parâmetro em seu construtor que será o id de um elemento qualquer. A chamada a essa função provoca o retorno de uma outra função declarada internamente na linha 3. Essa função interna recebe também um argumento e a função dela é adicionar esse argumento no conteúdo do elemento passado como parâmetro na função inicial. Criei uma função chamada processar apenas para aplicar uma mensagem a um função, será usada para fazer a mágica do Currying aqui. Veja na linha 15 que usei a função processar para submeter uma frase (primeiro argumento) na função atualizar (segundo argumento), passando para ela o id de um elemento como um DIV.

Observe que esse código é muito comum em frameworks ajax, um exemplo claro disso seria como o DWR trabalha.

 function callback(retorno) {
     alert(retorno);
 }

DWRInterface.metodo(callback);

Aqui aplicamos a função callback na função "metodo" que é um método do objeto DWRInterface controlado pelo framework DWR. DEssa forma quando o DWR processar a requisição ajax, submete o retorno vindo do servidor para a função callback que o recebe como parâmetro.
Vamos investigar outras características de linguagens funcionais nos próximos artigos.

Material CCT Janeiro 2008

Slides da palestra de ontem pelo CEJUG.

Agradecemos a presença dos membros do CEJUG em uma quarta-feira chuvosa a noite em local distante. Vocês estão de parabens!

Agradecemos a presença do Marcelo Diniz de Campina Grande – PB e do Leonardo Torres (Juazeiro do Norte-CE).

Marcelo Diniz (Campina Grande-PB), Rafael Carneiro (CEJUG Leader), Leonardo Torres (Juazeiro do Norte-CE) e Christiano Milfont.

Mais fotos na página do evento no CEJUG.

[update 25/01/2008]

O material do Silveira já está publicado no blog dele http://silveiraneto.net/.

[/update]