Observe que isso não pretende ser um argumento Java vs. C #. Sou um programador Java sem experiência em C #, pedindo apenas por curiosidade.
Eu fiz algumas leituras em C #, e parece que tem muito mais recursos do que Java. Vários exemplos:
- Inferência de tipo.
dynamic
palavra-chave- Delegados.
- Parâmetros opcionais.
- Lambda e LINQ (na verdade, não tenho idéia do que são).
- Propriedades.
No entanto, o Java realmente não apresenta nada que o C # não possua.
Minha pergunta é: por que o C # tem muito mais recursos nativos que o Java? E por que o Java não adicionou alguns deles ao longo dos anos, por exemplo, Propriedades ou inferência de tipo? Os designers da linguagem Java adotam uma abordagem mais simplista? Qual é a razão para isto?
Respostas:
Várias razões:
O resultado é que o Java agora tem um pouco de uma lacuna de recursos. Ele tem grandes planos para o futuro, mas como sempre, com esse tipo de coisa, tudo leva um pouco mais do que o planejado.
fonte
Eu acrescentaria à resposta de Kilian que uma grande diferença entre Java e C # é que os designers de C # controlam não apenas a linguagem, mas também o IDE padrão.
Adicionar algo como métodos de extensão e classes parciais pode ser um pesadelo no controle de versão de desenvolvimento / controle se os IDEs não o suportarem adequadamente.
Como é esperado que você consiga compilar Java com sua plataforma preferida (Eclipse, Netbeans, vi + Ant), adicionar recursos que quebram o código (e usá-los para desenvolver extensões adicionais como LINQ) é muito mais complicado do que apenas dizer " como o IntelliSense lidará com esses casos, não precisamos nos preocupar ".
Além disso, às vezes vale a pena notar o valor dos recursos em vez de seu número. Por exemplo, as propriedades automáticas são boas e eu certamente desejo que o Java suporte isso, mas no final isso significa apenas que você precisa escrever mais algumas linhas de código em Java. Da mesma forma, acho que chamar "Eventos" de um recurso é um pouco inadequado, uma vez que eles são pouco mais do que delegados especialmente rotulados e apenas uma cópia refinada do padrão Observer já usado por Java (novamente, em Java, ele precisa de mais explicações). codificação)
Não me interpretem mal, acho que o C # introduziu várias inovações dignas de nota e desejo que algum dia os grandes chefes da Oracle acorde e lance um verdadeiro "Java 2" para incluir alguns deles, mas a diferença não é tão óbvia quanto a sua. pontos de interrogação.
fonte