web-dev-qa-db-fra.com

Java et C #, à quelle distance sont-ils?

J'utilise C/C++ et Python, mais je vois maintenant que beaucoup de nouveaux livres de programmation utilisent Java ou C # comme exemples.

Je ne pense pas que je vais utiliser Java ou C # pour le moment, mais je suppose que je dois étudier l'un des langages (ou les deux) afin de lire/comprendre le livres.

  • Dans quelle mesure Java et C #? Si j'apprends Java, l'apprentissage de C # est-il presque gratuit? Ou vice versa?
  • Si je dois choisir une seule des deux langues, laquelle serait la meilleure? Lequel a une couverture plus large en termes de langage de programmation?
36
prosseek

Vous posez plusieurs questions à la fois. Permettez-moi de les aborder séparément:


Dans quelle mesure Java et C #?

C # et Java ont puisé dans C/C++ (et Objective C et d'autres) pour définir leur syntaxe. Et les deux sont compilés dans un langage intermédiaire.

Cette origine commune rend les langues similaires similaires à de nombreux niveaux, au point que le code dans l'une ou l'autre langue peut être confondu avec l'autre par les débutants; et rend également l'environnement d'exécution quelque peu comparable. Cependant, il existe des différences substantielles dans les deux principes de conception et dans la façon dont chaque langue a évolué, ce qui rend le travail avec chacun assez différent; voici les plus importants:

Au niveau de la syntaxe, Java a été influencé par Smalltalk, tandis que C # a essayé de rester plus proche de C/C++ (par exemple: comparer les extends et implements de Java avec les C #) : notation) et a pris une vague inspiration de VB sur ces concepts qui n'étaient pas mappables en C/C++ (exemple: syntaxe de propriété).

Au niveau des fonctionnalités, C # 1 était définitivement proche de Java. Parmi les quelques différences qu'ils avaient, je soulignerais le support de C # pour le code "dangereux" (y compris les pointeurs) et pour les délégués; et la controversée throws de Java. Cela a du sens, car l'un des objectifs de C # était de devenir une alternative à Java.

De nombreuses fonctionnalités de langage diffèrent fortement sur les détails de mise en œuvre. Par exemple, les énumérations sont très C'ish sur C #, mais sont des objets complets en Java; ou les génériques sont implémentés au niveau IL en C #, mais en Java sont traités via l'effacement de type (aucun n'est vraiment proche des modèles de C++ en plus de la syntaxe).

Au niveau de l'API, ce sont des mondes à part. C # s'appuie sur le .Net Framework, qui a été construit sur l'expérience de Microsoft avec la famille de produits Visual Studio (et est donc sensiblement orienté Windows), tandis que la bibliothèque de classes Java a été construite, IIRC, à partir de zéro, et a fortement évolué au fil du temps (sur ces jours Swing, quelqu'un se souvient-il d'AWT? Je le sais).

Enfin, il convient de mentionner que chacune des langues a ses propres idiomes et sa propre communauté de partisans derrière elle.


Si j'apprends Java, l'apprentissage de C # est-il presque gratuit? Ou vice versa?

Ni. La similitude clé est la syntaxe de base (points-virgules, accolades, indexation de tableau, respect de la casse, etc.), et vous l'avez déjà en C/C++.


Si je dois choisir une seule des deux langues, laquelle serait la meilleure?

Réponse courte: lancez une pièce. Réponse longue: cela dépend de votre style de codage et des aspects du langage que vous appréciez le plus. Mon meilleur conseil est de commencer par essayer d'apprendre les deux, jusqu'à ce que vous sentiez que l'une des langues vous tire plus fortement que l'autre.

Alternativement, vous pouvez jeter un œil à http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .


Lequel a une couverture plus large en termes de langage de programmation?

Si vous parlez de fonctionnalités intégrées au langage, je dirais que C # gagne pour une marge étroite. La plupart des fonctionnalités que C # possède et Java sont du sucre de syntaxe (même si elles font ensemble une différence significative sur la courbe d'apprentissage et sur la façon dont le langage est utilisé). Je valorise l'opérateur C # très élevé les méthodes de surcharge et d'extension. LINQ est également un concept assez intéressant, mais c'est essentiellement une syntaxe déclarative pour les boucles.

J'espère que cela t'aides.

44
Edurne Pascual

il y a une comparaison détaillée:

http://www.25hoursaday.com/CsharpVsJava.html

4
Kiddo

Si vous voulez une réponse brutalement subjective.

Je viens de terminer un diplôme en informatique en Angleterre, j'ai choisi une université qui enseignait le C # par opposition à Java ......... raison pour que je puisse facilement accéder directement à un emploi hautement rémunéré en tant que développeur de logiciels avec une entreprise qui ne veut tout simplement que des gens qui connaissent les "nouvelles" technologies.

Il s'agit d'entreprises telles que les banques d'investissement, les startups technologiques, les sociétés de conseil en informatique.

Donc, si vous voulez en choisir un pour apprendre ......

Pensez à l'objectif final ... si c'est de l'argent et des connaissances modernes ... suivez C #.

.... et si c'est autre chose, suivez C #

P.S. Java est terrible - je devais le dire.

3
Goober

Les bibliothèques sont très différentes et l'approche de la documentation est très différente. Je trouve l'approche C # plus facile.

Pour illustrer ce que je veux dire, dans les deux langues, un objet que vous souhaitez traiter peut être implémenté en héritant de "objet" en "objet générique" en "objet spécifique". En Java, si vous souhaitez découvrir une propriété de "l'objet générique", vous devez vous rendre dans le document pour cela, alors que dans la documentation C #, toutes les propriétés sont répertoriées pour "l'objet spécifique".

C'est du moins ce qu'il m'a semblé il y a quelques années lorsque j'ai fait du Java.

3
SeaDrive

Pas un mappage 1: 1 depuis C # 1.0. C # a ajouté beaucoup de choses (LINQ, fermetures, etc.) qui n'ont pas d'analogue en Java.

1
duffymo