| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 17:28:33
|
AndrewAguiar
JavaChild
Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline
|
Olá Pessoal.
Por que Java não tem sobrecarga de operadores.
Andei aprendendo Python recentemente e me parece um recurso bem util, existe alguma questão de design que faz com que eles não implementem ?
O que voces acham, tipo
ou com mapas
com um StringBuilder
no caso substituindo os append.
ou então nas suas proprias classes
Enfim não daria mais produtividade ?
Falow a todos
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 17:34:05
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline
|
Sobrecarga de operadores eh util pra um numero tao pequeno (porem extremamente frequente) de usos, que eu nao sei se vale a pena ser feature da linguagem.
Por outro lado, dah uma olhada no que o why_ fez no hpricot
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 17:35:47
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
Tem gente que acha que sim, tem gente que acha que não. Já foi discutido isso várias vezes.
Se quiser, vote aqui para ter operator overloading.
http://forum.java.sun.com/thread.jspa?threadID=624342&messageID=3550166
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 17:43:10
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2556
Localização: Chicago, EUA
Offline
|
Seria muito bom para contornar o sofrível suporte a aritmética com datas do Java....
Pior que isso só regular expressions com o seu match tentando dar um match na string inteira e não apenas em qualquer parte dela...
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframwork.org - Full-stack Java Web Framework com Configuracão Programática
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 20:51:22
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 851
Offline
|
O problema é: o que um código desses faz?
Soma os anos de fabricação, a capacidade dos tanques, a quilometragem rodada ou não tem nada a ver?
Flexibilidade e legibilidade andam em sentidos opostos. Não sei até que ponto isso vale a pena.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 21:02:46
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline
|
Schuenemann wrote:Soma os anos de fabricação, a capacidade dos tanques, a quilometragem rodada ou não tem nada a ver?
Chama o metodo public Carro +(Carro) da classe Carro, ueh. O que esse metodo faz depende da implementacao.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 21:52:05
|
Andre Breves
Moderador
![[Avatar]](/images/avatar/6512bd43d9caa6e02c990b0a82652dca.jpg)
Membro desde: 12/08/2002 23:33:19
Mensagens: 90
Localização: Brasília
Offline
|
Sinceramente não concordo com o argumento de que overload de operadores podem deixar o código mais complicado ou afetaria a legibilidade. Tudo depende do programador, assim como ocorre com o nome de método. Eu poderia muito bem fazer um método chamado add() que multiplicasse ao invés de somar.
A possibilidade de operador sobrecarregado não seguir a semântica padrão não é maior que com os nomes dos métodos, mas em compensação se teria uma grande vantagem de simplificar a sintaxe em muitas construções.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2007 22:27:10
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 851
Offline
|
cv wrote:
Schuenemann wrote:Soma os anos de fabricação, a capacidade dos tanques, a quilometragem rodada ou não tem nada a ver?
Chama o metodo public Carro +(Carro) da classe Carro, ueh. O que esse metodo faz depende da implementacao. 
Mas é isso que considero o problema: você precisa ver a implementação pra saber o que ele faz.
André Breves wrote:Eu poderia muito bem fazer um método chamado add() que multiplicasse ao invés de somar.
Tá, aí você poderia escolher um nome ruim. Mas, no caso do operador, não há nome algum. (Meu exemplo é meio tosco, é verdade).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 08:40:26
|
AndrewAguiar
JavaChild
Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline
|
Schuenemann wrote:Mas é isso que considero o problema: você precisa ver a implementação pra saber o que ele faz.
Ou então ver o Javadoc, como em qualquer outro método.
No caso o operador seria uma mera abreviação do metodo, para dar mais legibilidade, mais nada impediria voce de documenta-lo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 08:47:55
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
E se eu tivesse 2 classes com o "+" sobrecarregado com comportamentos diferentes? E se tivesse 20? E 200? Iria ficar lendo o javadoc de todas para saber o que o "+" faz em cada uma?
O Java querendo adotar um padrão e vocês querendo fugir de um comportamento comum.
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 08:56:14
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2478
Localização: Porto Alegre/RS
Offline
|
maquiavelbona wrote:E se eu tivesse 2 classes com o "+" sobrecarregado com comportamentos diferentes? E se tivesse 20? E 200? Iria ficar lendo o javadoc de todas para saber o que o "+" faz em cada uma?
exatamente a mesma coisa que tu tem que fazer com o metodo add de todas estas 20 ou 200 classes
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br - pt_BR
http://www.urubatan.info - en_US
Arquiteto J2EE
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 09:08:18
|
AndrewAguiar
JavaChild
Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline
|
maquiavelbona wrote:E se eu tivesse 2 classes com o "+" sobrecarregado com comportamentos diferentes? E se tivesse 20? E 200? Iria ficar lendo o javadoc de todas para saber o que o "+" faz em cada uma?
O Java querendo adotar um padrão e vocês querendo fugir de um comportamento comum.
Até!
Não entendi, no caso assim como num metodo o operador do objeto à esquerda ia ser aplicado.
Exemplo de uso:
Permitido pois c2 é um tipo de caixa:
Daria erro pois nem toda caixa é uma SuperCaixa
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 09:08:28
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
urubatan wrote:...
Colocar o nome dum método de add sendo que vai ter N métodos parônimos é deveras estúpido. Se você soma um carro com um carro, e um parafuso com um parafuso, os métodos, em tese, deveriam ser nomeados singularmente, pois os comportamentos são singulares. Senão, de nada adianta essa verborréia na convenção se você não faz uso dela. Se vais somar carros, supôe-se que seja algo do tipo addCar, se vai somar parafusos, addScrew ( ou suas variantes addAnotherScrew, addOneMoreScrew, addLotsOfScrews(List<Screw> listScrews)), assim por diante.
Até!
Obs.: Desculpem o estúpido, não achei palavra melhor. Não se sintam ofendidos com meu vocabulário diminuto.
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 09:13:02
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
Aliás, somar carro com carro, para mim, é coisa de recuperadora de veículos. Faz sentido somar produtos a uma cesta. Se ambos fossem sobrecarregados com "+", o comportamento do primeiro seria juntar dois carros, do segundo aglomerar produtos dentro de um cesta. Viu que complicação sendo que existe uma convenção de símbolos?
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 09:33:57
|
AndrewAguiar
JavaChild
Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline
|
maquiavelbona wrote:Aliás, somar carro com carro, para mim, é coisa de recuperadora de veículos. Faz sentido somar produtos a uma cesta. Se ambos fossem sobrecarregados com "+", o comportamento do primeiro seria juntar dois carros, do segundo aglomerar produtos dentro de um cesta. Viu que complicação sendo que existe uma convenção de símbolos?
Até!
Mais isso de fazer sentido varia de acordo com a sua regra de negócios, não tem nada a ver com a linguagem.
Eu poderia ter um produto que ao ser somado com outro seria um produto composto.
tipo minha regra de negócios diria que posso comprar tanto um Saco de Arroz quanto juntar diversos produtos e virar um só
|
|
|
 |
|
|