| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/08/2008 19:14:04
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3486
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Bruno Laturner wrote:Isso é currying de função ou pré-configuração do objeto?
Currying em Java só no dia que tivermos objetos-Função/Bloco
Traduzindo, quando Java tiver Closures :)
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 10:42:44
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 2185
Offline
|
Como posso criar uma closure que retorne ela mesma? Faz sentido?
This message was edited 1 time. Last update was at 12/08/2008 10:44:17
|
http://peczenyj.blogspot.com/
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 11:53:45
|
sergiotaborda
Forum Spammer
Membro desde: 22/03/2005 20:57:48
Mensagens: 1897
Offline
|
peczenyj wrote:
Como posso criar uma closure que retorne ela mesma? Faz sentido?
Não tenho a certeza , mas o this dentro do bloco de refere a uma instância da classe X e não ao objeto da closure.
|
Sérgio Taborda's Weblog
http://sergiotaborda.wordpress.com
Dados X Domínio : A Batalha |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 12:32:01
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 2185
Offline
|
Humm é mesmo, não faria muito sentido!
|
http://peczenyj.blogspot.com/
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 13:58:14
|
Marcio Duran
Virtual Machine Man
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 909
Offline
|
Uma resposta interessante para Closures
FONTE http://forums.sun.com/thread.jspa?threadID=612915&messageID=3390587
"I would still like to know what the closure abstration really means, then I will be
able to appreciate how well it is supported in a specific language like C++ or Java"
In set algebra, a closure of a set S, w.r.t. a binary operator 'o' is a set that contains
all elements of S and itself including the elements 'a o b', where a and b belong
to S or the closure of S, i.e. there are no possible elements to be found outside
this closure. e.g. mathematically, the set of all integers is a closure w.r.t. the +
operator. (the sum of two integers still is an integer).
Related to this mathematical notion is the closure of type 3 languages, or
regular expressions if you prefer. If RE is a regular expression, then RE*, i.e.
zero or more catenations of RE, is a closure of RE and is still a regular expression.
In the functional programming language world, a closure is a function where
no free variables can be found. e.g. f(x) <- x+y is not a closure, but g(y) <- f(x)
is one, if y is bound to a value. 'Currying' is a closely related concept.
If functions can be a first class citizen in a programming language, i.e. if functions
can be passed as arguments to other functions, just like simple ints etc, closures
are possible in that language no matter how 'mechanical' the construct.
In C, closures can be implemented by passed the address of a funcion and a
pointer to some struct that contains values needed by that function. The function
itself can dig those values from somewhere in that struct.
Object oriented language can 'hide' that fact a bit more by encapsulating those
values, as well as the function itself in an object. Languages that allow operator
overloading, including the function call 'operator' can hide this mechanism even
more by faking the object to be a function.
The possibilities are (almost?) endless here and it's up to your imagination how
to fake/handle those 'closures'. BeanShell (an interpreted Java like language) for
example allows this:
This code snippet prints "Foo! 42"; function f() acts as a closure for function g() and
can even keep all 'state' for that function g().
This message was edited 1 time. Last update was at 12/08/2008 14:07:27
|
M@rcio Costa Duran Ofbiz Brazil Solution Providers
Arquiteto da Informação
São Paulo WebSphere User Group
Projeto de Sotware com UML 2.0- ASPERCOM
Agilista Transformando Soluções
http://marcioduran.awardspace.com/
Migando blogs wordpress para awardspace Conteúdo em constantes atualizações.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 14:04:10
|
Bruno Laturner
Forum Spammer
Membro desde: 18/02/2008 16:17:53
Mensagens: 1221
Localização: 78050-000, Brazil
Offline
|
Maurício Linhares wrote:
Bruno Laturner wrote:Isso é currying de função ou pré-configuração do objeto?
Currying em Java só no dia que tivermos objetos-Função/Bloco
Traduzindo, quando Java tiver Closures 
Isso, ou algo parecido, é possível?
Marcio Duran wrote:Uma resposta interessante para Closures
(...)
Poste a fonte... http://forums.sun.com/thread.jspa?threadID=612915&messageID=3390587
This message was edited 1 time. Last update was at 12/08/2008 14:07:07
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 14:09:47
|
Marcio Duran
Virtual Machine Man
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 909
Offline
|
Bruno Laturner wrote:
FONTE
http://forums.sun.com/thread.jspa?threadID=612915&messageID=3390587
Achei que ficou melhor colocado, então postei essa fonte Sun Java Programming
|
M@rcio Costa Duran Ofbiz Brazil Solution Providers
Arquiteto da Informação
São Paulo WebSphere User Group
Projeto de Sotware com UML 2.0- ASPERCOM
Agilista Transformando Soluções
http://marcioduran.awardspace.com/
Migando blogs wordpress para awardspace Conteúdo em constantes atualizações.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 20:15:47
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 12879
Localização: SP
Offline
|
Closure c = { int, int => int } soma = { int a, int b => a + b };
Não há um tipo "Closure". Entretanto, você pode fazer a seguinte declaração:
Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 20:23:27
|
Marcio Duran
Virtual Machine Man
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 909
Offline
|
Neal Gafter Discusses Closures, Language Features and Optional Typing
Entrevista com alta resolução e texto simultaneo, InfoQ: Mais detalhes de Closures e JVM 1.7
http://www.infoq.com/interviews/gafter-closures-language-features-optional-typing
|
M@rcio Costa Duran Ofbiz Brazil Solution Providers
Arquiteto da Informação
São Paulo WebSphere User Group
Projeto de Sotware com UML 2.0- ASPERCOM
Agilista Transformando Soluções
http://marcioduran.awardspace.com/
Migando blogs wordpress para awardspace Conteúdo em constantes atualizações.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 23:16:22
|
Proteu Alcebidiano
JavaEvangelist
![[Avatar]](/images/avatar/ceccbaaff99be20a857e00767f70b481.jpg)
Membro desde: 23/06/2006 14:38:34
Mensagens: 357
Localização: Cidadão do Mundo
Offline
|
thingol wrote:
Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:
citando alguém mais pra cima nesse post, rola um Too much Gambiarra aí ou um Warning: Not Syntax Sugar? :D
Java desempenha um papel legal de compilador para novas linguagens sob a plataforma / linguagens dinâmicas (claro que nem sempre da maneira ideal para as linguagens dinâmicas). Agora essa incorporação de comportamento não previsto anteriormente no projeto da linguagem java tá de matar. =D
T+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 23:22:07
|
Proteu Alcebidiano
JavaEvangelist
![[Avatar]](/images/avatar/ceccbaaff99be20a857e00767f70b481.jpg)
Membro desde: 23/06/2006 14:38:34
Mensagens: 357
Localização: Cidadão do Mundo
Offline
|
thingol wrote:Uma coisa que seria interessante em closures é se eu pudesse fazer currying também.
Não cheguei a brincar suficientemente com o protótipo final (e olhe que eu estou acompanhando isso desde as primeiras propostas do Gafter), mas eu gostaria de fazer algo semelhante ao que posso fazer no Boost:
onde "boost::bind" é um template que efetua o currying de MyReadHandler, passando a "this" o ponteiro para função-membro "MyClass::MyReadHandler", e então passando os parâmetros a essa função-membro: error e bytes_transferred.
Isso daí que o thingol quer fazer tá parecendo com essa discussão aqui
T+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/08/2008 07:24:59
|
victorwss
Forum Spammer
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 1609
Localização: São Paulo - SP
Offline
|
thingol wrote:
Closure c = { int, int => int } soma = { int a, int b => a + b };
Não há um tipo "Closure". Entretanto, você pode fazer a seguinte declaração:
Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:
Sim, surgirá uma quantidade infinita de interfaces dentro do pacote javax.lang.function correspondentes aos closures. Uma bela gambiarra no compilador!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/08/2008 09:33:53
|
sergiotaborda
Forum Spammer
Membro desde: 22/03/2005 20:57:48
Mensagens: 1897
Offline
|
thingol wrote:
Não lembro direito (e estou sem o protótipo aqui para testar), mas se não me engano, esses tipos são sempre interfaces, então você pode ter algo como:
Admitindo que isso é possível ( o que me parece que não seja, mas tb não testei) estaria no mesmo nivel de codigos como
O objetido de um tipo de função (Function Type) é conter codigo, aka é o corpo entre chaves em um objeto ( já que e´a única coisa em java que não é uma objeto ... além dos primitivos, mas esse já têm o auto-boxing)
Tipo de função são apenas um boxing de codigo. Desde ponto de vista não ha razão para tentar escrever o código acima (até porque é "boxing" duplo ) e acredito que seria um anti-pattern pelo simples motivo que não é logico
De outro ponto de vista tipos de função ( de que as closures são um sub-tipo) não são interfaces, são objetos. São objetos que implementam certas interfaces. Mas tanto as interfaces como os objetos são criadas em runtime , logo, elas nem existem em tempo de compilação o que levaria esse código a não compilar. ( como disse não testei, mas se funcionar não faz sentido algum...)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/08/2008 12:11:45
|
Bruno Laturner
Forum Spammer
Membro desde: 18/02/2008 16:17:53
Mensagens: 1221
Localização: 78050-000, Brazil
Offline
|
invoke em que ser chamado explicitamente?
Acho sacanagem ter que fazer soma.invoke(2,3) em vez de soma(2,3). Se closures são funções, ajam como tal.
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/08/2008 12:15:50
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 12879
Localização: SP
Offline
|
Ainda acho mais claro usar "soma.invoke (2, 3)" que "(*soma) (2, 3)" - que é o caso do C quando usamos ponteiros de função. (Em C++ pode-se usar (*soma) (2, 3) ou soma (2, 3) mas C++ tem 200 jeitos de fazer a mesma coisa, e um menos intuitivo que o outro).
Mas realmente é uma gambiarra que existe porque a alternativa mais intuitiva (usar "soma (2, 3)"), segundo o sr. Neal Gafter, tem alguns problemas de ambigüidade sintática que são difíceis de resolver.
|
|
|
 |
|
|