C # semble être populaire de nos jours. J'ai entendu que syntaxiquement, c'est presque la même chose que Java. Java et C++ existent depuis plus longtemps. Pour quelles raisons devrais-je choisir C # plutôt que Java et C++?
La question devrait être "Quel langage est le mieux adapté au développement d'applications modernes et typiques?".
Edit: J'ai adressé certains des commentaires ci-dessous. Une petite remarque: considérez que lorsque vous avez beaucoup de choses nativement, comme idiomes, c'est une grande différence que de les implémenter ou de les télécharger et de les utiliser vous-même à chaque fois. Presque tout peut être implémenté dans n'importe laquelle de ces langues. La question est - ce que les langues vous fournissent nativement.
Donc du haut de ma tête (certains arguments s'appliquent aux deux langues) ...
this
statiquement typé), et donc de créer des relations plus dynamiques et flexibles entre les classes. modifier si vous ne savez pas ce que cela signifie, essayez d'attribuer une méthode membre retournant void et acceptant void à une variable void (*ptr)()
. Les délégués C # portent le pointeur this
avec eux, mais l'utilisateur n'a pas toujours à s'en soucier. Ils peuvent simplement affecter une méthode void()
de n'importe quelle classe à tout autre délégué void()
.using
). Java 7 va également supporter cela, mais C # l'a depuis bien plus longtemps.yield
.this
et lier la méthode qui le fait à un pointeur de fonction générique (c'est-à-dire pas dans la même classe), il n'y a tout simplement pas de façon native de le faire . En C #, vous obtenez gratuitement. Vous n'avez même pas besoin de savoir comment cela fonctionne.this
.using
, évidemment avec les wrappers IDisposable, est un excellent exemple de RAII. Voir ce lien . Considérez que vous n'avez pas autant besoin de RAII en C # qu'en C++, car vous avez le GC. Pour les moments spécifiques où vous en avez besoin, vous pouvez utiliser explicitement l'instruction using
. Autre petit rappel: libérer de la mémoire est une procédure coûteuse. Les GC ont leur avantage de performance dans de nombreux cas (surtout lorsque vous avez beaucoup de mémoire). La mémoire ne sera pas divulguée et vous ne passerez pas beaucoup de temps à désallouer. De plus, l'allocation est également plus rapide, car vous n'allouez pas de mémoire à chaque fois, seulement de temps en temps. Appeler new
revient simplement à incrémenter un dernier pointeur d'objet.new
et delete
, ce qui conduit toujours empiriquement à des erreurs ici et là, ou (avec C++ 11) vous pouvez utiliser les pointeurs automatiques en natif, mais gardez à l'esprit qu'ils ajoutent beaucoup, beaucoup de bruit au code. Donc, GC a toujours un Edge là-bas.Windows est le système d'exploitation dominant sur les ordinateurs clients. Les meilleurs cadres GUI pour les applications Windows sont Winforms et WPF avec . NET Framework. Le meilleur langage de programmation pour travailler avec . NET Framework et ses API est C #. Java n'est pas une alternative à cela. Et C++ est un langage plus ancien sans gestion automatique de la mémoire. C # est similaire à C++ mais a une gestion automatique de la mémoire et vous n'avez pas à travailler avec des pointeurs, ce qui vous rend plus productif. Le C++ peut toujours être la meilleure option dans certains cas, mais pas pour les applications de base de données gourmandes en formulaires qui sont courantes dans les entreprises.
Si vous avez l'habitude de travailler dans l'environnement Windows et avec C #, vous aurez besoin du moindre investissement pour apprendre IIS pour la programmation du serveur et Windows Server pour l'administration de base.
Si vous développez un logiciel qui sera déployé dans les réseaux d'entreprise, il est probable qu'ils utilisent un environnement centré sur Windows à l'aide d'un serveur Windows avec Active Directory. Dans un tel environnement, il est plus facile d'intégrer et de déployer une solution faite en C # et . NET Framework.
Personnellement, je suis un développeur Java, pas un développeur C #, mais je travaille avec le Web. Je passerais en C # si je développais des applications réseau pour le réseau Windows. Mais je préfère Java pour les serveurs Web basés sur Linux. Je choisirais C++ pour les systèmes embarqués où je ne ferais pas beaucoup de dépendances.
Oui, C # est un meilleur langage avec des fonctionnalités plus modernes que C++ et Java, mais c'est pas la chose la plus importante pour choisir C #.
L'environnement de votre logiciel est le plus important pour choisir C #. Si vous travaillez dans un environnement avec clients Windows, serveurs Windows, Active Directory, IIS et peut-être SQL Server alors C # est le meilleur langage avec le . NET Framework.
Si vous travaillez dans un environnement Unix avec par exemple services Web, Java serait mon choix. Et si vous travaillez avec des systèmes embarqués ou devez intégrer des périphériques matériels C++ serait un bon choix.
C # et Java
C # est un très bon langage si:
C # en tant que langage est plus agréable que Java de diverses manières (meilleure syntaxe pour les propriétés, types de valeur, génériques réifiés, etc.). Je préfère C # comme langage à Java mais dans le grand schéma des choses, ce sont des langages assez similaires et adaptés à des applications similaires.
D'un autre côté, Java a aussi de gros avantages:
Donc Java vs C # est un appel assez proche et cela revient vraiment à savoir si vous voulez être dans le camp Microsoft ou le camp Open Source/multiplateforme.
Personnellement, je préfère Java parce que:
C/C++
C/C++ est fondamentalement une bête complètement différente. Je ne le recommanderais pas pour le développement d'applications à usage général de nos jours pour les raisons suivantes:
Cependant, c'est sans aucun doute un excellent choix dans un certain nombre limité de domaines spéciaux, en particulier:
Donc, fondamentalement, C/C++ est un excellent choix si et seulement si vous vous concentrez sur l'un des domaines où il est particulièrement bien adapté.
I heard that syntactically they are almost the same.
Syntaxiquement? Qui donne des singes volants sur la syntaxe? La syntaxe est bonne pour une seule chose: permettre une migration plus rapide à partir de langages syntaxiquement similaires. C'est ça.
C # est bien meilleur que Java. Considérez leur support de programmation générique et fonctionnel - C # est bien en avance sur Java. Sans parler des surcharges d'opérateurs, et d'autres bonnes choses - C # est largement mieux présenté. Il n'y a aucun moyen que Java pourrait être considéré comme meilleur que C #.
C++ et C # est plus un concours. C++ a un modèle de compilation archaïque incroyablement ennuyeux et un tas d'héritage maladies de C, mais ses modèles sont beaucoup plus puissants que les génériques, et ses approches de gestion des ressources sont beaucoup plus flexibles et puissantes en général, comme using
est un échec complet et il s'exécute plus rapidement.
Bien C#
a quelques fonctionnalités intégrées comme LINQ
et les délégués. Il tire le meilleur parti des deux mondes - Java
et C++
. Regardez ici pour une comparaison complète.
Mais j'aime mieux le monde Java
- beaucoup plus de frameworks open source et il fonctionne sur toutes les plateformes. Et ne me parlez pas de Mono
- ce n'est pas une option fiable.
Selon certaines sources (voir par exemple http://www.indeed.com/jobtrends ) C # est toujours moins populaire que Java, et aussi populaire que C++.
C # fournit des fonctionnalités qui manquent Java, par exemple le support direct de certains idiomes de programmation comme les propriétés, le style de programmation fonctionnel, etc.). C # a un niveau d'abstraction plus élevé que C++, ce qui est un avantage lorsque le temps de développement est plus important que la vitesse du programme.
Personnellement, je préfère toujours les mondes Java/C++. Comme l'a dit Petar Minchev, Java a plus de frameworks et d'applications open source, il s'exécute partout, est moins lié à un fournisseur et à un système d'exploitation particuliers. C++ présente des avantages similaires, même si le code nécessite souvent des adaptations allant d'une plate-forme à une autre. Comme je préfère développer sous Linux et, à ma connaissance, je ne peux pas avoir un C # à part entière sous Linux, je jamais eu un réel intérêt pour C # car mes besoins de programmation sont couverts par C, C++, Java, Scala.
En revanche, pour de nombreux développeurs, être lié à un fournisseur particulier n'est pas un problème: Microsoft a une position dominante sur le marché des systèmes d'exploitation et C # offre de nombreuses opportunités d'emploi. Par conséquent, de nombreux développeurs de l'OMI adoptent C # car, en plus d'être un langage riche en fonctionnalités, c'est également un bon investissement.
Qu'en est-il de "Quel cadre de développement logiciel, qui inclut un langage de programmation", c'est mieux?
Vous avez oublié d'inclure d'autres éléments, comme "l'environnement" avec lequel vous allez travailler.
Allez-vous travailler uniquement pour Windows O.S., mais ne doit pas être de bas niveau et avoir beaucoup de mémoire et d'autres ressources?
Choisissez .NET comme framework sur Windows et utilisez C #.
Allez-vous travailler uniquement pour Windows, mais ne doit pas être de bas niveau, MAIS, n'a pas beaucoup de ressources?
Choisissez le framework Delphi (et le langage de programmation Delphi Object Pascal ou le langage de programmation Object Pascal Lazarus)
Est votre application. nécessaire pour prendre en charge plusieurs plates-formes, comme un jeu, dans différents mobiles?
Choisissez le Java Framework, et le Java langage de programmation.
Est-ce Linux avec KDE comme interface graphique?
Choisissez le framework QT, avec C++
Est-ce Linux avec Gnome comme interface graphique?
Choisissez le framework GObject/GLib, avec C++
Allez-vous travailler avec de nombreuses opérations de bas niveau, comme le développement de pilotes?
Le C ou C++ ordinaire est utilisé pour plusieurs systèmes d'exploitation, avec des bibliothèques standard, comme cadre.
Juste mes 2 cents.
Si vous effectuez une recherche, vous risquez de tomber sur une discussion sur les meilleurs langages de programmation. Voici l'un des résultats de la recherche - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java still semble être la langue la plus populaire.
Java a essayé de supprimer certaines des lacunes de C++ (et de simplifier la vie des programmeurs pour les applications non en temps réel et non critiques). C # étant le dernier venu à la fête, a évité certaines des lacunes du Java. C # a fait beaucoup de progrès (car Microsoft a beaucoup de contrôle sur lui)) tandis que les progrès dans = Java a été bloqué pendant une période de temps considérable en raison d'un conflit entre ses parties prenantes.
Quelques choses qui n'ont pas déjà été mentionnées:
C # est meilleur que C++ car:
Il supprime les fichiers d'en-tête, ce qui se traduit par une grande simplicité.
C # est meilleur que Java parce que:
Il prend en charge à la fois les types définis par l'utilisateur de type référence (classe) et de type valeur (struct) qui, si vous savez ce que vous faites, peuvent générer des avantages de performances significatifs.
Il prend en charge les délégués, qui sont comme des interfaces à méthode unique, simplifiant ainsi considérablement le codage des constructions fréquentes qui impliquent des objets à méthode unique.
Vous devez choisir la meilleure langue pour votre environnement attendu et votre expertise.
Choisissez C # si vous travaillez dans un environnement Microsoft uniquement. Alors que C # est normalisé selon ISO/IEC 23270: 2003, la version de Microsoft reste la seule implémentation complète. Plusieurs parties clés du langage ne sont pas couvertes par la norme et sont donc soumises aux brevets de Microsoft. Personne d'autre n'implémentera une version complètement compatible de la langue pour les autres systèmes, donc en fait, vous êtes verrouillé par Microsoft Windows et .Net pour le fournisseur tant que vous utilisez la langue. Si vous recherchez des compétences à utiliser sur le marché mobile, le mieux est de chercher dans une autre langue.
Java fonctionne, mais a beaucoup de frais généraux, en partie en raison de fonctionnalités telles que la récupération de place. Java n'est pas non plus normalisé par ISO/IEC, vous n'avez donc aucune garantie si vous changez de plate-forme et de version de Java, uniquement les meilleures intentions de Sun/Oracle. Si vous prévoyez de travailler avec Android, c'est définitivement la voie à suivre. La programmation d'Android est essentiellement Java, avec quelques modifications.
C++ est standardisé et presque tous les compilateurs suivent la norme internationale, vous avez donc un comportement garanti MAIS le langage ne vous protège pas de vous-même. Vous devez effectuer vous-même le nettoyage et la vérification du débordement. Ce n'est pas difficile. Les programmeurs C/C++ le font depuis de nombreuses années. Apple utilise Objective C pour tout, donc si vous voulez viser Apple, je vous recommande d'essayer à la place.
Si vous vous voyez laisser Windows derrière vous à un moment donné, je vous suggère d'apprendre à la fois C/C++ et Java - qui sont tous deux commercialisables à l'heure actuelle.
En ce qui concerne C++ vs C # (comme je ne suis pas assez compétent en Java), ce qui me manque ici, c'est la possibilité d'accéder à des trucs de bas niveau sur Windows. Par exemple, vous ne pouvez pas développer un pilote d'affichage natif en C # (encore), mais vous pouvez le faire avec C++. Cela n'améliore pas le C++. Je vois C++ contre C # comme Assembly contre C.
C # est à mon avis beaucoup plus efficace si vous regardez le temps qu'il faut pour implémenter réellement une fonctionnalité. La pénalité de performance du runtime .Net est négligeable pour 99% des applications développées. Cela peut être important si vous exécutez une boucle serrée, oui, bien sûr, mais la plupart du temps, une application est inactive, en attente de tout type d'entrée, de signal ou d'interruption (disque IO, clic de bouton, réseau, achèvement de l'animation) .
La bibliothèque CLR avec toutes ses fonctions présente un autre gros avantage. Lorsque j'ai formé C # à des développeurs juniors, la plupart d'entre eux ont dit qu'ils aimaient la convention d'appellation logique des classes, des membres et des espaces de noms. Trouver une fonctionnalité de méthode était logique à travers le SDK, quelque chose que Visual Basic 5 était sérieusement défectueux. Cela les a énormément aidés à adopter la bibliothèque. Après avoir appris la syntaxe d'un langage, apprendre à apprendre une nouvelle bibliothèque est important pour bien comprendre n'importe quel SDK. Cela vous évite de réinventer la roue.