Avançar para o conteúdo principal

Closures em Java

Aqui há tempos, a trabalhar em Javascript (ECMAScript para os mais puristas) acabei por "descobrir" essa técnica engraçadíssima que são os "closures". Usei-os num "test-case" de algumas técnicas de Javascript num inacabado XML Tree Editor (se se derem ao trabalho de ir ver, são os pequenos ícones de gravar/abandonar que aparecem quando se edita um nó da árvore) e que em termos de código são apenas uma coisa do género
var editOk = new function(){
var i=document.createElement('img');
i.src="images/save.gif";
i.style.verticalAlign="top";
i.onclick=function(){
saveThis(this.previousSibling, name, pos);
}
return i;
}

o que a mim me parece quase magia, pois só com isto o raio dos ícones sabem onde estão, quem são e o que fazer... (a "magia" está, é claro, no "name" e "pos" que são definidos no método exterior).

Realmente, já há muitos anos que eu fazia coisas do género, sem saber que se chamava a isto "closures", em linguagens como dBase/Clipper e LotusScript. Mas que provavelmente eram "side-efects" e não "features"...

E agora parece que já está mais ou menos definido que as "closures" vão também "aparecer" no Java 7. O que abre concerteza mais um campo de batalha propícia a "flame-wars"... É que como não há fome que não dê em fartura, existem não uma, nem duas nem sequer três mas (para já) quatro propostas de implementação. Bom começo!

E está claro que ainda antes de discutir os méritos e a bondade de cada proposta, podia-se ainda discutir coisas como:
  • Mas será que as closures são realmente necessárias?
  • Mas será que as closures são realmente necessárias no Java?
  • Mas afinal as "anonymous inner-classes" não são a mesma coisa?
  • Tá bem, não são, mas não bastam para o que é preciso?
E por aí adiante, é quase "cada cabeça sua sentença"... Já agora dou os meus "dois cêntimos" (de Euro) ao assunto, respondendo às duas primeiras questões na minha perspectiva:
  • Mas será que as closures são realmente necessárias?
Claro, tudo o que se pareça com "magia" é bem-vinda à arte da programação, se não for a magia qualquer dia somos todos "engenheiros"... (oops!)
  • Mas será que as closures são realmente necessárias no Java?
Apesar de as closures virem de tão longe como do Lisp e do Smalltalk, acho muito discutível que as closures possam ser consideradas numa perspectiva de "pure object-oriented". Mas de qualquer modo, Java não é "pure object-oriented"... E sempre fará o pessoal do RoR ficar contente...

E pronto, como podem ver aqui, aqui e acolá, a discussão tem pano para mangas...

Comentários

Mensagens populares deste blogue

Backup automático de disco USB (pen drive)

Hoje em dia toda a gente tem uma pen drive para levar os seus ficheiros de um lado para o outro. E muitas vezes está lá trabalho importante. Mas impõe-se uma pergunta: o que acontece se se perde a pen drive ? Ou se esta se avaria? Quem é que faz backups regulares da pen drive ? Muito pouca gente! Pessoalmente tenho por hábito fazer um backup cerca de uma vez por semana. Quando o trabalho é muito, faço backup mais vezes. Mas já por duas vezes as avarias me fizeram perder as versões mais recentes. E isto chateia. Por isso aqui há uns dias decidi "coçar esta comichão" e resolver o problema de forma mais sistemática: arranjei maneira de fazer um backup automático cada vez que ligo a pen drive a um computador. (sim, eu sei que há software específico para isto, mas que querem, apeteceu-me fazer mais um) A receita é relativamente simples: um script (DOS batch file ) que faz o backup , um ficheiro de definição de autorun e já está. 1. O script de backup - Basta instalar, na roo...

Ideias sobre o ensino à distância em 2020

O processo de combate ao COVID-19 obriga a que todos repensem as suas actividades normais e um dos sectores mais afectados é o Ensino. Diz-se com frequência que o Ensino em Portugal continua no séc. XX, porque continua a depender quase totalmente de lápis, caneta, papel e livros. Entre os anos de 1965 e 1987, Portugal teve a  Telescola , um projecto de ensino à distância que tentava resolver a falta de professores do ciclo preparatório (5º e 6º anos) em locais remotos. Desde então, tanto quanto sabemos, não houve mais projectos de ensino à distância em larga escala. Retrospectivamente, talvez tenha sido um erro mas, enfim, são coisas fáceis de dizer à posteriori. O tele-ensino não é uma coisa nova e os constrangimentos tecnológicos de hoje são muito menores. Nada que se compare, por exemplo com a experiência School of the Air , existente na Austrália desde 1951, quando os miúdos podiam apenas falar com os professores por rádios alimentados a pedais. Foto: "Miss Molly Ferg...

Recém-licenciados das TI não sabem produzir sistemas de informação

Uma das conclusões mais chocantes do recente trabalho " Competências a reforçar na formação dos profissionais de TI em Portugal ", do Grupo de Trabalho das Competências, da ANETIE é que os recém-licenciados não sabem o suficiente sobre construção de interfaces nem sobre produção de informação . Não conheço estatísticas sobre esta matéria. Mas julgo que não estará muito longe da verdade a afirmação de que mais de 90% dos licenciados em cursos ligados às TI estarão envolvidos profissionalmente na produção ou exploração de Sistemas de Informação de Gestão. Isto é: bases de dados, formulários electrónicos, relatórios operacionais ou analíticos, troca de informação entre sistemas, etc.. Ora o que a ANETIE apurou junto dos seus associados é que entre as maiores lacunas encontradas nos licenciados do sector que se vão depois dedicar à engenharia de software, os conhecimentos sobre coisas básicas como écrans de entradas de dados e emissão de relatórios são extremamente baixos. Outr...