| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 13:26:03
|
saoj
Forum Spammer
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 1914
Localização: RJ, BRA
Online
|
Em Java temos a útil convenção de que métodos getters (getXXXX) retornam uma propriedade de um objeto.
E em Ruby?
Tenho um objeto é quero listar via reflection todas as suas propriedades. Devo assumir que todo método sem parametros e que retorna algo (e não termina com '?', '=' ou '!') é uma propriedade?
This message was edited 1 time. Last update was at 17/05/2008 13:26:38
|
- Durante séculos, a luta da moralidade foi travada entre aqueles que afirmavam que a vida pertence a Deus e aqueles que afirmavam que ela pertence ao próximo - entre aqueles que pregavam que o bem é sacrificar-se em nome de fantasmas no céu e aqueles que pregavam que o bem é sacrificar-se em nome dos ignorantes na terra. E ninguém veio para dizer-lhes que a sua vida pertence a vocês, e que o bem consiste em vivê-la. (John Galt) |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 14:35:32
|
tnaires
Virtual Machine Man
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 602
Localização: Natal - RN
Offline
|
Ter acesso direto às variáveis de instância usando instance_variables não resolveria seu problema?
Você pode obter e modificar seus valores usando instance_variable_get e instance_variable_set, respectivamente.
|
Tarso Nunes Aires |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 17:40:41
|
saoj
Forum Spammer
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 1914
Localização: RJ, BRA
Online
|
tnaires wrote:Ter acesso direto às variáveis de instância usando instance_variables não resolveria seu problema?
Você pode obter e modificar seus valores usando instance_variable_get e instance_variable_set, respectivamente.
Variável de instância é BEM diferente de propriedade. A primeira é privada e interna e a segunda pode não ter qualquer ligação com a primeira.
Ex:
Parece que falta uma convenção em Ruby para dizer quando um método é um getter de uma propriedade. Ou ela existe e eu não a conheço, por isso a pergunta.
This message was edited 1 time. Last update was at 17/05/2008 17:42:59
|
- Durante séculos, a luta da moralidade foi travada entre aqueles que afirmavam que a vida pertence a Deus e aqueles que afirmavam que ela pertence ao próximo - entre aqueles que pregavam que o bem é sacrificar-se em nome de fantasmas no céu e aqueles que pregavam que o bem é sacrificar-se em nome dos ignorantes na terra. E ninguém veio para dizer-lhes que a sua vida pertence a vocês, e que o bem consiste em vivê-la. (John Galt) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 19:56:29
|
tnaires
Virtual Machine Man
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 602
Localização: Natal - RN
Offline
|
Não estou bem certo se entendi.
Dentro do contexto da sua explicação, para que uma variável de instância seja uma propriedade em Java, basta atribuir um getter ( read-only ) ou um getter e um setter, certo?
Então o equivalente em Ruby são as declarações attr_reader, attr_writer e attr_accessor.
|
Tarso Nunes Aires |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 20:10:50
|
saoj
Forum Spammer
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 1914
Localização: RJ, BRA
Online
|
tnaires wrote:Não estou bem certo se entendi.
Dentro do contexto da sua explicação, para que uma variável de instância seja uma propriedade em Java, basta atribuir um getter ( read-only ) ou um getter e um setter, certo?
Então o equivalente em Ruby são as declarações attr_reader, attr_writer e attr_accessor.
O que eu quiz dizer é que uma variável de instancia não é obrigatoriamente uma propriedade, seja em Ruby, em Java ou em qualquer outra linguagem OO que possua encapsulamento. O meu exemplo de código mostra isso.
Em Ruby não há a convenção de getXXXX, logo como saber quais métodos getters indicam propriedades? Em Java tudo que é getXXX sem parametros é uma propriedade, ou pelo menos é essa a convenção desde os primórdios da linguagem (JavaBeans).
This message was edited 1 time. Last update was at 17/05/2008 20:12:55
|
- Durante séculos, a luta da moralidade foi travada entre aqueles que afirmavam que a vida pertence a Deus e aqueles que afirmavam que ela pertence ao próximo - entre aqueles que pregavam que o bem é sacrificar-se em nome de fantasmas no céu e aqueles que pregavam que o bem é sacrificar-se em nome dos ignorantes na terra. E ninguém veio para dizer-lhes que a sua vida pertence a vocês, e que o bem consiste em vivê-la. (John Galt) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 23:27:22
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7749
Localização: London, UK
Offline
|
Cospe na cara do Demeter, mesmo.
http://www.pragprog.com/articles/tell-dont-ask
Mas, ja que eu sei que vc eh cabeca dura e nao vai desistir, o melhor jeito eh criar algo do tipo:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2008 23:51:30
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 3894
Localização: São Paulo
Offline
|
:attr_reader & cia: http://www.ruby-doc.org/docs/UsersGuide/rg/accessors.html
Se teu código precisa de muitos accessors ele tem um sério problema de design.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 01:37:13
|
saoj
Forum Spammer
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 1914
Localização: RJ, BRA
Online
|
Interessante. É que no meu caso tudo que eu quero é, via reflection, imprimir todas as propriedades públicas de um objeto. Nada de muito complexo ou pecaminoso.
Mas, ja que eu sei que vc eh cabeca dura e nao vai desistir, o melhor jeito eh criar algo do tipo:
Bem legal essa sua idéia, mas eu ou vc ou qualquer um pode criar seu próprio esquema de propriedades para objetos Ruby. Cheguei até a pensar que esse Properties que você incluiu era do próprio Ruby, mas procurando no RDocs não encontrei nada parecido. Me parece natural termos uma convenção onde todos usariam o mesmo esquema para indicar uma propriedade pública, assim como em Java usamos métodos getters (getXXXX) sem argumentos.
Se hoje vc me passa um objeto Cidade e eu quero imprimir e/ou ter acesso a todas suas propriedades como CEP => '22222-123', Name => 'Rio de Janeiro', Estado = 'RJ', etc. Como eu faço? Bisbilhotar variáveis de instancia que por definição são privadas não me parece sadio. Chamar todos os métodos sem parametros seria insano.
Só queria realmente saber se há alguma convenção para isso da própria linguagem ou não.
louds wrote:
Se teu código precisa de muitos accessors ele tem um sério problema de design.
Sim, assim como se vc come muitas batatas-fritas terá sérios problemas gastro-intestinais (vide o filme Super Size Me). Propriedades me parece algo tão trivial quanto batatas-fritas, já se você vai utilizar esse recurso em demazia é outra história. The ass has nothing to do with the paints, right?.
This message was edited 5 times. Last update was at 18/05/2008 02:02:52
|
- Durante séculos, a luta da moralidade foi travada entre aqueles que afirmavam que a vida pertence a Deus e aqueles que afirmavam que ela pertence ao próximo - entre aqueles que pregavam que o bem é sacrificar-se em nome de fantasmas no céu e aqueles que pregavam que o bem é sacrificar-se em nome dos ignorantes na terra. E ninguém veio para dizer-lhes que a sua vida pertence a vocês, e que o bem consiste em vivê-la. (John Galt) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 01:54:41
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7749
Localização: London, UK
Offline
|
saoj wrote:Se hoje vc me passa um objeto Cidade e eu quero imprimir e/ou ter acesso a todas suas propriedades como CEP => '22222-123', Name => 'Rio de Janeiro', Estado = 'RJ', etc. Como eu faço? Bisbilhotar variáveis de instancia que por definição são privadas não me parece sadio. Chamar todos os métodos sem parametros seria insano.
Da pra expandir o codigo que eu te mostrei em algo do tipo city.to_pointless_bag_of_properties() #=> {:cep =>'', :name=>'' }, mas como o proprio nome do metodo diz, isso nao faz la muito sentido.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 11:59:26
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2400
Localização: Porto Alegre/RS
Offline
|
saoj, o que tu quer fazer é programar java em Ruby.
se tu vai usar outra linguagem, siga os padrões e preceitos da linguagem nova, e não tente programar da mesma forma que fazia na linguagem anterior.
da forma que tu quer fazer ( Programar Java em Ruby ) não vai ter muitas vantagens usar Ruby.
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br - pt_BR
http://www.urubatan.info - en_US
Arquiteto J2EE
Minha Empresa: http://www.techoffice.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 12:33:29
|
saoj
Forum Spammer
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 1914
Localização: RJ, BRA
Online
|
urubatan wrote:saoj, o que tu quer fazer é programar java em Ruby.
se tu vai usar outra linguagem, siga os padrões e preceitos da linguagem nova, e não tente programar da mesma forma que fazia na linguagem anterior.
da forma que tu quer fazer ( Programar Java em Ruby ) não vai ter muitas vantagens usar Ruby.
Respire, conte até 10, que vc vai compreender que o que vc está falando é tendencioso ou não tem absolutamente nada haver com o tema em questão.
Recebi um objeto Cidade de um sistema desconhecido/remoto/feito pelo cliente e quero listar todas as suas propriedades via reflection. E isso não justifica essa baboseira retórica de programar em Ruby pensando em Java, Objective C, C#, Python, etc. De novo, e dessa vez em português puro, a bunda não tem nada haver com as calças.
Descaracterizar o argumentador não descaracteriza o seu argumento, apesar de prejudicialmente desviar o foco do debate, além de ser tb indelicado.
This message was edited 10 times. Last update was at 18/05/2008 20:01:23
|
- Durante séculos, a luta da moralidade foi travada entre aqueles que afirmavam que a vida pertence a Deus e aqueles que afirmavam que ela pertence ao próximo - entre aqueles que pregavam que o bem é sacrificar-se em nome de fantasmas no céu e aqueles que pregavam que o bem é sacrificar-se em nome dos ignorantes na terra. E ninguém veio para dizer-lhes que a sua vida pertence a vocês, e que o bem consiste em vivê-la. (John Galt) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 12:58:06
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7749
Localização: London, UK
Offline
|
saoj wrote:Recebi um objeto Cidade de um sistema desconhecido/remoto/feito pelo cliente e quero listar todas as suas propriedades via reflection.
Pq nao perguntar pra tal objeto como ele quer ser representado? Use as classes abertas e o fato de Ruby ser baseado em mensagens (e nao em metodos/propriedades) pra te ajudar, ao inves de quebrar o encapsulamento desse jeito.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 13:11:27
|
saoj
Forum Spammer
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 1914
Localização: RJ, BRA
Online
|
cv wrote:
saoj wrote:Recebi um objeto Cidade de um sistema desconhecido/remoto/feito pelo cliente e quero listar todas as suas propriedades via reflection.
Pq nao perguntar pra tal objeto como ele quer ser representado? Use as classes abertas e o fato de Ruby ser baseado em mensagens (e nao em metodos/propriedades) pra te ajudar, ao inves de quebrar o encapsulamento desse jeito.
Entendi que não precisamos de métodos/propriedades, mas mesmo para fazer essa "pergunta" via "mensagens" precisamos de um acordo entre as partes, certo?
Bom, estarei criando o seguinte requirimento para os objetos externos que querem ter suas propriedades visíveis ao meu sistema.
This message was edited 2 times. Last update was at 18/05/2008 13:12:41
|
- Durante séculos, a luta da moralidade foi travada entre aqueles que afirmavam que a vida pertence a Deus e aqueles que afirmavam que ela pertence ao próximo - entre aqueles que pregavam que o bem é sacrificar-se em nome de fantasmas no céu e aqueles que pregavam que o bem é sacrificar-se em nome dos ignorantes na terra. E ninguém veio para dizer-lhes que a sua vida pertence a vocês, e que o bem consiste em vivê-la. (John Galt) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2008 13:25:44
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7749
Localização: London, UK
Offline
|
saoj wrote:
Faz o properties() retornar um Hash com os nomes e valores, logo. Assim vc nao fica fazendo N+1 de bobeira.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/05/2008 09:03:43
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 3894
Localização: São Paulo
Offline
|
Em ruby é muito mais fácil ter contratos ad hoc. Se teu problema é o que estará acessível na view, assuma que tudo e pronto. Em vez de listar tudo, envie p/ o teu objeto somente as mensagens que a view solicitar. Simples assim.
Na view
Em vez de listar tudo de antemão, espere precisar e só então, quando a view solicitar, envie :foo p/ teu objeto.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
|
|