Veuillez noter qu'il ne s'agit pas d'un argument Java vs C #. Je suis un programmeur Java sans expérience en C #, demandant juste par curiosité.
J'ai fait quelques lectures sur C #, et il semble qu'il ait beaucoup plus de fonctionnalités que Java. Quelques exemples:
- Inférence de type.
dynamic
mot-clé.- Délégués.
- Paramètres facultatifs.
- Lambda et LINQ (je n'ai en fait aucune idée de ce que c'est).
- Propriétés.
Cependant, Java ne propose pas vraiment tout ce que C # n'a pas.
Ma question est: pourquoi C # a-t-il beaucoup plus de fonctionnalités natives que Java? Et pourquoi Java n'a-t-il pas ajouté certains de ces éléments au fil des ans, par exemple Propriétés ou inférence de type? Les concepteurs du langage Java adoptent-ils une approche plus simpliste? Quelle est la raison pour ça?
Réponses:
Plusieurs raisons:
Le résultat est que Java a maintenant un peu de manque de fonctionnalités. Il a d'énormes plans pour l'avenir, mais comme d'habitude avec ce genre de chose, tout prend un peu plus de temps que prévu.
la source
J'ajouterais à la réponse de Kilian qu'une grande différence entre Java et C # est que les concepteurs C # contrôlent non seulement le langage, mais aussi l'IDE standard.
L'ajout de quelque chose comme des méthodes d'extension et des classes partielles pourrait être un cauchemar dans le développement / contrôle des versions si les IDE ne le supportaient pas correctement.
Comme vous êtes censé être capable de compiler Java avec la plate-forme de votre choix (Eclipse, Netbeans, vi + Ant), ajouter des fonctionnalités qui cassent le code (et les utiliser pour développer des extensions supplémentaires comme LINQ) est beaucoup plus compliqué que de simplement dire " comme IntelliSense traitera ces cas, nous ne devons pas nous inquiéter ".
De plus, il convient parfois de noter la valeur des fonctionnalités au lieu de leur nombre. Par exemple, les propriétés automatiques sont agréables et je souhaite certainement que Java le prenne en charge, mais au final cela signifie seulement que vous devez écrire quelques lignes de code supplémentaires en Java. De même, je trouve qu'appeler "Events" une fonctionnalité est un peu impropre, car ils ne sont guère plus que des délégués spécialement étiquetés, et juste une copie raffinée du modèle Observer déjà utilisé par Java (là encore, en Java, il a besoin de plus explicite codage)
Ne vous méprenez pas, je pense que C # a introduit plusieurs innovations notables, et je souhaite qu'un jour les grands patrons Oracle se réveillent et lancent un vrai "Java 2" pour inclure certains d'entre eux, mais l'écart n'est pas aussi évident que votre points d'interrogation.
la source