C # semble être populaire ces jours-ci. J'ai entendu dire que sa syntaxe est presque identique à celle de Java. Java et C ++ existent depuis plus longtemps. Pour quelles raisons devrais-je choisir C # plutôt que Java et C ++?
C # semble être populaire ces jours-ci. J'ai entendu dire que sa syntaxe est presque identique à celle de Java. Java et C ++ existent depuis plus longtemps. Pour quelles raisons devrais-je choisir C # plutôt que Java et C ++?
Réponses:
La question devrait être "Quelle langue est la mieux adaptée au développement d'applications modernes et typiques?".
Edit: J'ai abordé certains des commentaires ci-dessous. Petite remarque: considérez que lorsque vous avez beaucoup d'éléments natifs, les idiomes sont une différence majeure par rapport à leur implémentation ou leur téléchargement et à leur utilisation personnelle à chaque fois. Presque tout peut être implémenté dans l'une de ces langues. La question est de savoir quelles langues vous fournissent nativement.
Donc, par coeur (certains arguments s'appliquent aux deux langues) ...
this
argument du pointeur de type statique ), et donc de créer des relations plus dynamiques et flexibles entre les classes. éditez si vous ne savez pas ce que cela signifie, puis essayez d'affecter une méthode membre renvoyant void et acceptant void pour une void (*ptr)()
variable. Les délégués C # portent le this
pointeur avec eux, mais l'utilisateur ne doit pas toujours s'en soucier. Ils peuvent simplement assigner une void()
méthode de n'importe quelle classe à un autre void()
délégué.using
déclaration). Java 7 va également le supporter, mais C # l’a eu pendant longtemps.yield
déclaration.this
pointeur et lier la méthode qui le fait à un pointeur de fonction générique (c'est-à-dire ne pas appartenir à la même classe), il n'y a tout simplement pas de moyen natif de le faire. En C #, vous obtenez le gratuitement. Vous n'avez même pas besoin de savoir comment cela fonctionne.this
pointeur.using
déclaration, évidemment avec les wrappers IDisposable, est un excellent exemple de RAII. Voir ce lien . Considérez que vous n'avez pas besoin de RAII autant en C # qu'en C ++, car vous avez le GC. Pour les moments spécifiques où vous en avez besoin, vous pouvez utiliser explicitement la using
déclaration. Un autre petit rappel: libérer de la mémoire est une procédure coûteuse. Les GC ont des avantages en termes de performances dans de nombreux cas (en particulier lorsque vous avez beaucoup de mémoire). La mémoire ne sera pas perdue et vous ne passerez pas beaucoup de temps à désallouer. De plus, l'allocation est également plus rapide, car vous n'allouez pas de la mémoire à chaque fois, mais seulement de temps en temps. L'appel new
consiste simplement à incrémenter un dernier pointeur d'objet.new
et delete
, ce qui mène toujours empiriquement à des erreurs ici ou là, ou (avec C ++ 11), vous pouvez utiliser des pointeurs automatiques de manière native, mais gardez à l'esprit qu'ils ajoutent des tas de bruit au code. Donc, GC a toujours un avantage là-bas.Windows est le système d'exploitation dominant sur les ordinateurs clients. Winforms et WPF ainsi que .NET Framework sont les meilleures infrastructures graphiques pour les applications Windows . Le meilleur langage de programmation pour travailler avec .NET Framework et ses API est C # . Java n'est pas une alternative pour cela. Et C ++ est un langage ancien sans gestion automatique de la mémoire. C # est similaire au C ++ mais possède une gestion automatique de la mémoire et vous n’aurez pas à travailler avec des pointeurs, ce qui vous rend plus productif. C ++ peut toujours être la meilleure option dans certains cas, mais pas pour les applications de base de données à forte intensité de formulaire qui sont courantes dans les entreprises.
Si vous avez l'habitude de travailler dans l'environnement Windows et avec C #, vous aurez besoin du moins d'investissement possible pour apprendre IIS pour la programmation serveur et Windows Server pour l'administration de base.
Si vous développez un logiciel qui va être déployé dans les réseaux d'entreprise, il est probable qu'ils utilisent un environnement centré Windows utilisant un serveur Windows avec Active Directory. Dans un tel environnement, il est plus facile d'intégrer et de déployer une solution conçue 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 à 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 le C ++ pour les systèmes embarqués sans beaucoup de dépendances.
Oui, C # est un meilleur langage avec des fonctionnalités plus modernes que C ++ et Java, mais ce n’est pas la chose la plus importante pour choisir C # .
L’environnement de votre logiciel est primordial pour le choix de C # . Si vous travaillez dans un environnement avec les clients Windows, serveurs Windows, Active Directory, IIS et peut - être SQL Server puis C # est la meilleure langue bien avec le .NET Framework .
Si vous travaillez dans un environnement Unix avec, par exemple, des services Web, Java serait mon choix. Et si vous travaillez avec des systèmes embarqués ou si vous 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 à bien des égards (meilleure syntaxe pour les propriétés, les types de valeur, les génériques réifiés, etc.). Je préfère C # comme langue de Java , mais dans le grand schéma des choses qu'ils sont des langues assez similaires et conviennent pour des applications similaires.
Par ailleurs, Java présente également de grands avantages:
Donc, Java vs C # est un appel assez proche et il s’agit vraiment de savoir si vous voulez être dans le camp Microsoft ou dans le camp Open Source / multiplateforme.
Personnellement, je préfère Java car:
C / C ++
C / C ++ est fondamentalement une bête totalement différente. Je ne le recommanderais pas aujourd'hui pour le développement d'applications à usage général pour les raisons suivantes:
Cependant, il s’agit sans aucun doute d’un excellent choix dans un certain nombre de domaines particuliers, notamment:
Le C / C ++ est donc 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 un singe volant à propos de la syntaxe? La syntaxe n’est utile que pour une chose: permettre une migration plus rapide de langages syntaxiquement similaires. C'est ça.
C # est nettement 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, le C # est beaucoup mieux présenté. Il est impossible que Java soit considéré comme meilleur que C #.
C ++ et C # sont plus qu'un concours. C ++ a un modèle de compilation archaïque incroyablement ennuyeux et un tas de maladies héritées 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 souples et puissantes en général, tout comme using
un échec complet, et il est exécuté plus rapide.
Eh bien C#
a de belles fonctionnalités intégrées comme LINQ
et délégués. Il tire le meilleur des deux mondes - Java
et C++
. Regardez ici pour une comparaison complète.
Mais j'aime Java
mieux le monde: beaucoup plus de frameworks open source fonctionnant 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 une prise en charge directe de certains idiomes de programmation tels que 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 le disait Petar Minchev, Java dispose de plus de frameworks et d'applications open source, il fonctionne partout, est moins lié à un fournisseur et à un système d'exploitation particuliers. Le C ++ présente des avantages similaires, même si le code nécessite souvent des adaptations d'une plate-forme à une autre. Puisque je préfère développer sur Linux et, à ma connaissance, je ne peux pas avoir de C # à part entière sous Linux, je n’ai jamais eu un réel intérêt pour C # car mes besoins en programmation sont couverts par C, C ++, Java, Scala.
En revanche, pour de nombreux développeurs, le fait d’être lié à un fournisseur particulier n’est pas un problème: Microsoft occupe une position dominante sur le marché des systèmes d’exploitation et C # offre de nombreuses possibilités d’emploi. Par conséquent, de nombreux développeurs OMI adoptent C # car, en plus d’être un langage riche en fonctionnalités, c’est aussi un bon investissement.
Qu'en est-il de "Quel cadre de développement logiciel, qui inclut un langage de programmation", est-il meilleur?
Vous avez oublié d'inclure d'autres éléments, tels que "l'environnement" avec lequel vous allez travailler.
Allez-vous travailler uniquement pour Windows, mais ne devez 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 nécessairement être de bas niveau, MAIS, ne dispose pas de beaucoup de ressources?
Choisissez le framework Delphi (et le langage de programmation Delphi Object Pascal ou Lazarus Object Pascal)
Est votre application. requis pour prendre en charge plusieurs plates-formes, comme un jeu, dans différents mobiles?
Choisissez le framework Java et le langage de programmation Java.
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 beaucoup d'opérations de bas niveau, comme le développement de pilotes?
Plain C ou C ++ est utilisé pour plusieurs systèmes d'exploitation, avec des bibliothèques standard, en tant que framework.
Juste mes 2 cents.
Si vous effectuez une recherche, vous risquez de tomber sur une discussion sur les principaux langages de programmation. Voici l'un des résultats de la recherche - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java semble toujours être la langue la plus populaire.
Java a tenté de supprimer certaines des faiblesses du C ++ (et de simplifier la vie des programmeurs pour les applications non temps réel et non critiques). C # étant le dernier venu à la soirée, il a évité certaines des faiblesses du langage Java. C # a fait beaucoup de progrès (car Microsoft en a le contrôle), alors que les avancées en Java ont été bloquées pendant une longue période 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 ++ parce que:
Il supprime les fichiers d'en-tête, ce qui se traduit par une grande simplicité.
C # est meilleur que Java car:
Il prend en charge les types définis par l'utilisateur de type référence (classe) et type de valeur (struct), qui, si vous savez ce que vous faites, peuvent générer des avantages de performance significatifs.
Il prend en charge les délégués, qui sont comme des interfaces à une seule méthode, ce qui simplifie grandement le codage des constructions fréquentes impliquant des objets à une seule méthode.
Vous devez choisir la langue la mieux adaptée à votre environnement 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 entièrement compatible de la langue pour d'autres systèmes. Par conséquent, votre fournisseur est verrouillé sur Microsoft Windows et .Net aussi longtemps que vous utilisez cette langue. Si vous recherchez des compétences à utiliser sur le marché de la téléphonie mobile, mieux vaut chercher une autre langue.
Java fonctionne, mais génère beaucoup de temps système, en partie à cause de fonctionnalités telles que le garbage collection. De plus, Java n’est pas normalisé par ISO / IEC, vous n’avez donc aucune garantie de changer de plate-forme ou de version de Java, mais uniquement les meilleures intentions de Sun / Oracle. Si vous envisagez de travailler avec Android, c'est vraiment la voie à suivre. La programmation d'Android est essentiellement Java, avec quelques modifications.
Le C ++ est normalisé et presque tous les compilateurs respectent la norme internationale. Vous avez donc un comportement garanti MAIS le langage ne vous protège pas. 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 plutôt.
Si vous vous voyez abandonner Windows à un moment ou à un autre, je vous conseillerais d'apprendre les langages C / C ++ et Java, tous deux commercialisables à l'heure actuelle.
En ce qui concerne C ++ vs C # (comme je ne maîtrise pas suffisamment Java), il me manque ici la possibilité d’accéder à des fonctions de bas niveau sur Windows. Par exemple, vous ne pouvez pas (encore) développer un pilote d'affichage natif en C #, mais vous pouvez le faire avec C ++. Cela ne rend pas le C ++ meilleur. Je vois C ++ versus C # comme Assembly versus C.
À mon avis, C # est beaucoup plus efficace si l’on prend en compte le temps nécessaire pour mettre en œuvre 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 d'entrée-sortie, clic de bouton, réseau, animation terminée). .
La bibliothèque CLR avec toutes ses fonctions présente un autre gros avantage. Quand je formais C # aux développeurs débutants, la plupart d’entre eux ont dit qu’ils aimaient la convention de nommage logique des classes, des membres et des espaces de noms. Trouver une fonctionnalité de la méthode était logique dans le SDK, ce à quoi Visual Basic 5 était gravement défaillant. Cela les a énormément aidés dans l’adoption de la bibliothèque. Après avoir appris la syntaxe d'une langue, apprendre à apprendre une nouvelle bibliothèque est essentiel pour bien comprendre tout SDK. Cela vous évite de réinventer la roue.