Estava lendo o artigo do C# na wikipedia e vi q ele faz uma série de comparações. Uma delas me deixou na dúvida. Lá faz uma série de afirmações um tanto tendenciosas. Como por exemplo não ter sobrecarga de operadores no java. Oras, quando o programador define corretamente classes e métodos não é necessário nada disso. Concordam?
Os editores da Wikipedia viram que houve problemas nesse artigo devido a essa guerra entre o Java e o C#. Quer editar o tal artigo também?
louds
eduacsp:
Pessoal,
Estava lendo o artigo do C# na wikipedia e vi q ele faz uma série de comparações. Uma delas me deixou na dúvida. Lá faz uma série de afirmações um tanto tendenciosas. Como por exemplo não ter sobrecarga de operadores no java. Oras, quando o programador define corretamente classes e métodos não é necessário nada disso. Concordam?
Que tem sobrecarga de operadores é um fato. O artigo não julga o mérito se é melhor ou não.
Quanto a não ser necessário, vou te propor um exercício, escreva uma classe que representa números complexos.
publicclassComplex{doublereal,imaginary;publicComplex(doubler,doublei){real=r;imaginary=i;}publicComplexadd(Complexc){returnnewComplex(real+c.real,imaginary+c.imaginary);}publicComplexmul(Complexc){returnnewComplex(real*c.real-imaginary*c.imaginary,imaginary*c.real+c.imaginary*real);}}//Exemplo cálculo de d = a * b + cComplexa,b,c,d;//...d=a.mul(b).add(c);//com sobrecarga de operadoresd=a*b+c
Imagine agora fazendo contas complexas, com por exemplo RSA.
Leozin
Vamos lá
Segue o post do louds
Não sei dizer… meu conhecimento é muito limitado nisso ae. Sou muito cabaço nisso heuioaiea
Correto. Em outras palavras, em .NET todas as excessões são como RuntimeException de Java
Aí eu não sei. Java não implementa mesmo, mas não lembro de usar isso no C#. Eu sei que o debug do .NET dá pra pegar a linha de execução e pular pra qualquer parte da classe ehauioeha muito legal, é como se fosse um goto mesmo
Concordo
Verdade
bom não vejo nada de “anormal” nesse post, sei lá, parece que teve nego que ficou bravinho por nada
rodrigoallemand
Há rumores que as proximas versões de Java irão vir com essa opção"destravada"… digo destravada pq se vc compilar o codigo abaixo funciona… então, provavelmente a Classe String faz essa sobrecarga de operadores.
String a = "Hello"
String b = "World"
String c = a + " " + b;
Nunca senti necessidade disso… mas em contrapartida, Java não sofre com os problemas de estouro de memória e coisas do gênero causados por C++ (salvo exceções)
Correto. Em outras palavras, em .NET todas as excessões são como RuntimeException de Java
Ai é aquela briga de sempre… O mundo de Java é mais amplo do que o do C# neste aspecto para mim… Existem exceções que vc não precisa esperar o código rodar pra saber que pode acontecer… então porque não trata-la logo?!?
Aí eu não sei. Java não implementa mesmo, mas não lembro de usar isso no C#. Eu sei que o debug do .NET dá pra pegar a linha de execução e pular pra qualquer parte da classe ehauioeha muito legal, é como se fosse um goto mesmo
Bem, ter GoTo mfaz C# melhor?!? GoTo, implicitamente, coloca seu código estruturado… vc pula de partes para partes do seu código, o que na verdade quebra um pouco a sua OO… Mas mesmo assim, se isso é uma justificativa do C#, eles estão bem ferrados de argumentos…
Concordo
Tb não vi a diferença que gerar um XML pra cada classe é melhor do que páginas HTML bem explicadas…
Verdade
Não tenho conhecimento pra opinar nisso…
Leozin
hey, gostaria de deixar claro que não estou dizendo o que é melhor ou pior hehehe
os comparativos não mostram quem é melhor ou pior… só mostra diferenças entre as linguagens
louds
No C# código não seguro (unsafe) é útil para integração com bibliotecas nativas ou então para otimizar o código. No geral é sempre uma péssima idéia apelar para código unsafe, mas não deixa de ser bom ter essa opção. É possivel ter buffer-overflows com unsafe code, porém dado que seu uso costuma ser pequeno não é tão nocivo assim.
Checked exception é um daqueles recursos que só geram enormes flamewars e nunca se chega a uma boa conclusão. Não acho nem melhor nem pior, apenas diferente.
C# suporta goto. Porém uma enorme imbecilidade e retrocesso. Java provou que com named loops goto é nocivo em 99,99999999% dos casos.
Para mim da na mesma, só muda a sintaxe. Questão de gosto; e gosto, como todo mundo sabe, é feito b…n…a.
Indexadores é uma forma de overload de operadores que te permite definir um operador [], não tem nada de especial. Delegates, em contra partida, são o recurso que separa o C# do Java. Programar usando delegates é muito, mas muito, mais fácil que em Java com inner classes, command interfaces ou qualquer outro tipo de gambiarra. Delegates é o que permite o IronPython ser rápido e faz o mesmo pelo IronRuby.
rodrigoallemand
Checked exception é um daqueles recursos que só geram enormes flamewars e nunca se chega a uma boa conclusão. Não acho nem melhor nem pior, apenas diferente.
Concordo! (Como no Woodstock) No War!! No War!! No War!!!
neohacker
Bem não conheço C#, mas vou opinar:
Bem acho que se é inseguro pra que implementar, isso evita péssimos programadores.
Ao meu ver é bem melhor, pois novamente evita os péssimos programadores que não sabem nada, mas também não resolve muito capturar qualquer exceção checada com Exception :x
Ainda bem que não existe goto, só serve pra piorar o código, e vai pra lá e vai pra cá, nunca se sabe onde vai estar, e ainda fala que goto é estrutura de controle, onde tem controle nisso auhauahua :lol:
sergiotaborda
rodrigoallemand:
Leozin:
Segue o post do louds
Há rumores que as proximas versões de Java irão vir com essa opção"destravada"… digo destravada pq se vc compilar o codigo abaixo funciona… então, provavelmente a Classe String faz essa sobrecarga de operadores.
String a = "Hello"
String b = "World"
String c = a + " " + b;
O que o artigo diz é verdade. Java não implementa propriedades nem sobrecarga de operadores.
O codigo acima com String não é sobrecarga de operador. É sintax sugar . Ocompilador gera um StringBuffer/Builder e escreve as operações append. Aquilo ali vira
String a = "Hello"
String b = "World"
String c = new StringBuilder().append(a).append(" ").append(b).toString();
Não ha sobrecarga de operadores em Java. Nem mesmo para String.
jason_bourne
sergiotaborda:
rodrigoallemand:
Leozin:
Segue o post do louds
Há rumores que as proximas versões de Java irão vir com essa opção"destravada"… digo destravada pq se vc compilar o codigo abaixo funciona… então, provavelmente a Classe String faz essa sobrecarga de operadores.
String a = "Hello"
String b = "World"
String c = a + " " + b;
O que o artigo diz é verdade. Java não implementa propriedades nem sobrecarga de operadores.
O codigo acima com String não é sobrecarga de operador. É sintax sugar . Ocompilador gera um StringBuffer/Builder e escreve as operações append. Aquilo ali vira
String a = "Hello"
String b = "World"
String c = new StringBuilder().append(a).append(" ").append(b).toString();
Não ha sobrecarga de operadores em Java. Nem mesmo para String.
e precisa?
marciosantri
Pra mim isto é suicídio. Não deveria ter no C#. Aliás, nunca conheci nenhum programador que utilizasse isto. Só vi uso dessas coisas no velho Basic.
Rafael_Steil
neohacker:
Bem não conheço C#, mas vou opinar:
Bem acho que se é inseguro pra que implementar, isso evita péssimos programadores.
Em .NET, além de você poder utilizar qualquer biblioteca COM+ já existente, com suporte a código não-gerenciado você pode programar em .NET a app, e ainda assim tirar proveito de coisas que somente seriam possíveis com uma linguagem como C++. Porém, isso não é normal de ser encontrado.
Rafael
W
windsofhell
Sempre programei em Java, mas vou mudar de emprego em 2 meses pra desenvolver em C#.
Confesso que eu nao consigo dizer qual eh melhor.
Esses dias mesmo eu estudei Delegates e Events, fiquei muito impressionado com isso, achei mto mto bom. E varias outras coisas em C# que eu acho interessante como o ja citado overload de operadores.
Properties tb facilita muito e deixa o codigo super limpo e legivel.
Estou curioso agora pra usar o visual studio. Estou por enquanto usando mono e monodevelop pra estudar.
//Daniel
jason_bourne
windsofhell:
Sempre programei em Java, mas vou mudar de emprego em 2 meses pra desenvolver em C#.
Confesso que eu nao consigo dizer qual eh melhor.
Esses dias mesmo eu estudei Delegates e Events, fiquei muito impressionado com isso, achei mto mto bom. E varias outras coisas em C# que eu acho interessante como o ja citado overload de operadores.
Properties tb facilita muito e deixa o codigo super limpo e legivel.
Estou curioso agora pra usar o visual studio. Estou por enquanto usando mono e monodevelop pra estudar.
//Daniel
traidor
W
windsofhell
eduacsp:
windsofhell:
Sempre programei em Java, mas vou mudar de emprego em 2 meses pra desenvolver em C#.
Confesso que eu nao consigo dizer qual eh melhor.
Esses dias mesmo eu estudei Delegates e Events, fiquei muito impressionado com isso, achei mto mto bom. E varias outras coisas em C# que eu acho interessante como o ja citado overload de operadores.
Properties tb facilita muito e deixa o codigo super limpo e legivel.
Estou curioso agora pra usar o visual studio. Estou por enquanto usando mono e monodevelop pra estudar.
//Daniel
traidor :P
hahahahaha
O dinheiro fala mais alto! ahaha, brincadeira.
Mas sei la, como disse num outro topico, acho o Java uma linguagem excepcional, eu realmente gosto. Mas nao visto a camisa de ng, acho que vai ser um desafio legal pra mim mudar, profissionalmente vai ser melhor e se um dia aparecer uma boa oportunidade de trabalhar com Java novamente, vou com o maior prazer.
S
Schuenemann
Ué? Tirando a sobrecarga de operadores, que não existe consenso se é bom ou ruim, o que Java não tem disso aí?
luistiagos
realmente seria bom se o java tivesse sobrecarga de operadores e deixasse vc manipular ponteiros…
sobrecarga de operadores acho que sera implementado em alguma versão futura do java…
agora manipulação de ponteiros acho meio dificil pois isto tiraria a função uma função da VM…
louds
Schuenemann:
windsofhell:
Esses dias mesmo eu estudei Delegates e Events, fiquei muito impressionado com isso, achei mto mto bom. E varias outras coisas em C# que eu acho interessante como o ja citado overload de operadores.
Properties tb facilita muito e deixa o codigo super limpo e legivel.
Ué? Tirando a sobrecarga de operadores, que não existe consenso se é bom ou ruim, o que Java não tem disso aí?
Tipo… tudo. Java não tem suporte a delegates e events. Você pode, claro, emular o comportamento, mas com é de se esperar, fica ruim pacas.
victorwss
Realmente, você pode emular qualquer coisa. Já vi código em assembler emulando orientação a objetos. Isso sim fica ruim pacas, mas funciona.
O Allegro por exemplo (biblioteca em C para jogos), na estrutura interna ele simula o polimorfismo utilizando ponteiros de função. Algo tosco, trabalhoso e complexo, mas que consegue o seu propósito: o polimorfismo. Fica tosco, trabalhoso e complexo por causa que a linguagem C não suporta polimorfismo, então é necessário estes tipos de artifícios para simulá-lo.
Antes do java 5, havia muita gente que dizia que java não precisava de generics. Hoje vemos claramente que ajuda bastante (embora também tenha o seu preço). Era possível sim programar genericamente antes do java 5, mas era necessário usar vários artifícios para contornar-se as limitações da linguagem, o que cria vários outros problemas.
L
Leonardo3001
Manipulação de ponteiros seria péssimo em Java, principalmente porque nesta linguagem não se faz coisas muito baixo nível.
Mas sobrecarga de operadores seria algo interessante, desde que fosse algo controlado. Eu já cheguei a imaginar que para a implementação de sobrecarga deveria haver um certo contrato (ou seja, interfaces). Por exemplo, deveria haver uma interface chamada NumberProfile, com métodos plus(), minus(), times() e dividedBy(). Uma classe que quisesse usar operadores implementaria essa interface, e sempre que houvesse no código, por exemplo, o operador *, ele seria interpretado como o método times() da interface. É uma idéia, poderia haver também CharSequenceProfile ou CollectionProfile nesse mesmo esquema.
Porém, seria interessante que o assunto “sobrecarga de operadores” fosse discutido dentro de uma solução maior, como, por exemplo, a eliminação da diferença (ou pelo menos, a redução de “gap”) entre tipos primitivos e classes, que tanto confunde a cabecinha dos que começam em Java.
wmitsuda
Uma vez vi numa biblioteca um livro chamado “Assembly orientado a objetos”. Provavelmente o cara deve ter aplicada as técnicas desse livro… rs
Acho que o exemplo mais famoso desse “estilo” de programação é o GTK. Se não me falha a memória, ele usa structs p/ representar classes e ponteiros de função como elementos do struct p/ simular métodos.
S_io_Rangel_Sabino
eduacsp:
Pessoal,
Estava lendo o artigo do C# na wikipedia e vi q ele faz uma série de comparações. Uma delas me deixou na dúvida. Lá faz uma série de afirmações um tanto tendenciosas. Como por exemplo não ter sobrecarga de operadores no java. Oras, quando o programador define corretamente classes e métodos não é necessário nada disso. Concordam?
A única coisa que vi realmente relevante é a sobrecarga de operadores que realmente não sei se há um meio de contornar isso, mas como que para tudo se dá um jeitinho ainda tenho esperanças, até porque a falta disso deve ter uma boa justificativa… Mas como não trabalho com software do meio científico (no qual essa necessidade se aplica), ainda não tive tempo para me dedicar a esse problema.
Sobre properties, isso pra mim não é uma vantagem. Pois, pelo jeito que foi feito chega a ser um impecilho. No Eclipse por exemplo, existe o assistente de “generate getters and setters” que exime a necessidade de properties. Porém, na plataforma .net, usando o visual studio 2008, mesmo tendo properties não existe um assistente como o que tem no Eclipse (pelo menos não descobri nada ainda, só o tal do code snipets, que ajuda muito pouco), obrigando o programador a criar as propriedades ou pelo menos especificar os membros privados tudo na mão, um por um. Resumindo, nesse caso, .net chama é mais chamativo porém é menos produtivo pra quem coloca a mão na massa.
M
marcosalex
"
ralphsilver
GOTO? putz… se isso for mérito para C# então os programadores de tal genero se contentam com pouco. Imagina pular linha de código de acordo com a posição dela? Se ocorrer alguma alteração de código vai ter que revisar todos os goto para ver se algum saiu fora de sincronismo.
É vantajoso para o java não possuir ele.
caiodorn
windsofhell:
eduacsp:
windsofhell:
Sempre programei em Java, mas vou mudar de emprego em 2 meses pra desenvolver em C#.
Confesso que eu nao consigo dizer qual eh melhor.
Esses dias mesmo eu estudei Delegates e Events, fiquei muito impressionado com isso, achei mto mto bom. E varias outras coisas em C# que eu acho interessante como o ja citado overload de operadores.
Properties tb facilita muito e deixa o codigo super limpo e legivel.
Estou curioso agora pra usar o visual studio. Estou por enquanto usando mono e monodevelop pra estudar.
//Daniel
traidor :P
hahahahaha
O dinheiro fala mais alto! ahaha, brincadeira.
Mas sei la, como disse num outro topico, acho o Java uma linguagem excepcional, eu realmente gosto. Mas nao visto a camisa de ng, acho que vai ser um desafio legal pra mim mudar, profissionalmente vai ser melhor e se um dia aparecer uma boa oportunidade de trabalhar com Java novamente, vou com o maior prazer.
É isso aí, cara. Nunca vista a camisa de ninguém… senão a tua própria. Fanboy é foda… graças a eles q a gente vê as tais “flame wars”… q por sinal são bem irritantes. Parece coisa de fanático religioso.
Link_pg
Bom, como já estou ha uns 3 meses trabalhando com C#, pude sentir na pele a diferença entre as duas linguagens. Quanto ao artigo da Wikipedia, não falou besteira nenhuma. C# é bem mais flexivel do que Java, até porque ele foi criado bem depois de Java, pegando algumas “deficiencias” e melhorando (um pouco). No geral, C# é bem legal de programar, mas ainda faço meus projetos pessoais em Java. Comparar Java com C# é mesma coisa que comparar um Golf com um Stilo. Eu prefiro Golf mas ter um Stilo não é nenhuma má idéia.
Só o VS que me decepcionou, sinto falta de muita coisa do eclipse. Legal a “novidade” do VS 2010.