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?
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?[/quote]
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.
public class Complex {
double real, imaginary;
public Complex (double r, double i) {
real = r;
imaginary = i;
}
public Complex add (Complex c) {
return new Complex (real + c.real, imaginary + c.imaginary);
}
public Complex mul (Complex c) {
return new Complex (
real * c.real - imaginary * c.imaginary,
imaginary * c.real + c.imaginary * real);
}
}
//Exemplo cálculo de d = a * b + c
Complex a,b,c,d;
//...
d = a.mul(b).add(c);
//com sobrecarga de operadores
d = a * b + c
Imagine agora fazendo contas complexas, com por exemplo RSA.
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
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[/quote]
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[/quote]
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[/quote]
Tb não vi a diferença que gerar um XML pra cada classe é melhor do que páginas HTML bem explicadas…
Verdade[/quote]
Não tenho conhecimento pra opinar nisso…
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.
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:
Segue o post do louds
[/quote]
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;
[/quote]
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.
Segue o post do louds
[/quote]
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;
[/quote]
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.[/quote]
[quote=neohacker]Bem não conheço C#, mas vou opinar:
Bem acho que se é inseguro pra que implementar, isso evita péssimos programadores.
[/quote]
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.
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.
[quote=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.
[quote=eduacsp][quote=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[/quote]
traidor :P[/quote]
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.
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…
[quote=Schuenemann][quote=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.
[/quote]
Ué? Tirando a sobrecarga de operadores, que não existe consenso se é bom ou ruim, o que Java não tem disso aí?[/quote]
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.
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.