Feuille de route pour les développeurs Java apprenant C#
C# et Java ont de nombreuses similitudes. À mesure que vous apprenez C#, vous pouvez appliquer une grande partie des connaissances que vous avez déjà à partir de la programmation en Java :
- Syntaxe similaire : Java et C# se trouvent dans la famille C de langages. Cette équivalence entre les langages signifie que vous êtes déjà capable de lire et de comprendre C#. Il existe des différences, mais la plupart de la syntaxe est la même que celle de Java et. Les accolades et les points-virgules sont familiers. Les instructions de contrôle telles que
if
,else
etswitch
sont identiques. Les instructions de bouclage defor
,while
etdo
...while
sont identiques. Les mêmes mots clés pourclass
etinterface
sont dans les deux langages de programmation. Les modificateurs d’accès à partir depublic
àprivate
sont identiques. Même la plupart des types intégrés utilisent les mêmes mots clés :int
,string
etdouble
. - Paradigme orienté objet : Java et C# sont des langages orientés objet. Les concepts de polymorphisme, d’abstraction et d’encapsulation s’appliquent dans les deux langages. Les deux ont ajouté de nouvelles constructions, mais les caractéristiques de base restent pertinentes.
- Fortement typé : Java et C# sont fortement typés. Vous déclarez le type de données des variables, explicitement ou implicitement. Le compilateur applique la cohérence des types. Le compilateur intercepte les erreurs liées au type dans votre code, avant de l’exécuter.
- Multiplateforme : Java et C# sont multiplateformes. Vous pouvez exécuter vos outils de développement sur votre plateforme préférée. Votre application peut s’exécuter sur plusieurs plateformes. Votre plateforme de développement n’est pas obligée de correspondre à votre plateforme cible.
- Gestion des exceptions : Java et C# lèvent des exceptions pour indiquer des erreurs. Les deux utilisent des blocs
try
- -catch
finally
pour gérer les exceptions. Les classes Exception ont des noms similaires et des hiérarchies d’héritage. Une différence est que C# n’a pas le concept d’exceptions vérifiées. Toute méthode peut (en théorie) lever n’importe quelle exception. - Bibliothèques standard : le runtime .NET et la bibliothèque Java Standard (JSL) prennent en charge les tâches courantes. Les deux ont des écosystèmes étendus pour d’autres packages open source. En C#, le gestionnaire de package est NuGet. Il est analogue à Maven.
- Garbage Collection : les deux langages utilisent la gestion automatique de la mémoire via le Garbage Collection. Le runtime récupère la mémoire à partir d’objets qui ne sont pas référencés. Une différence est que C# vous permet de créer des types valeur, en tant que types
struct
.
Vous serez productif en C# presque immédiatement en raison des similitudes. À mesure que vous progressez, vous devez apprendre des fonctionnalités et des expressions en C# qui ne sont pas disponibles dans Java :
- Critères spéciaux : les critères spéciaux permettent de mettre en place des instructions et des expressions conditionnelles concises basées sur la forme de structures de données complexes. L’instruction
is
vérifie si une variable « est » un modèle. L’expressionswitch
basée sur des modèles fournit une syntaxe riche pour inspecter une variable et prendre des décisions en fonction de ses caractéristiques. - Interpolation de chaîne et littéraux de chaînes brutes : l’interpolation de chaîne vous permet d’insérer des expressions évaluées dans une chaîne, plutôt que d’utiliser des identificateurs de position. Les littéraux de chaînes brutes permettent de réduire la présence de séquences d’échappement dans le texte.
- Types Nullables et types non-nullables : C# prend en charge les types valeur Nullables et les types référence Nullables via l’ajout du suffixe
?
à un type. Pour les types Nullables, le compilateur vous avertit si vous ne vérifiez pasnull
avant de déréférencer l’expression. Pour les types non-nullables, le compilateur vous avertit si vous êtes sur le point d’affecter une valeur potentiellementnull
à cette variable. Les types de référence non nullables réduisent les erreurs de programmation qui lèvent un System.NullReferenceException. - Méthodes d’extension : en C#, vous pouvez créer des méthodes qui étendent une classe ou une interface. Les méthodes d’extension étendent le comportement d’un type à partir d’une bibliothèque ou de tous les types qui implémentent une interface donnée.
- LINQ : Language Integrated Query (LINQ) fournit une syntaxe commune pour interroger et transformer des données, quel que soit leur emplacement de stockage.
- Fonctions locales : en C#, vous pouvez imbriquer des fonctions à l’intérieur de méthodes ou d’autres fonctions locales. Les fonctions locales fournissent une autre couche d’encapsulation.
Il existe d’autres fonctionnalités en C# qui ne sont pas en Java. Vous verrez des fonctionnalités telles que async
et await
, et des instructions using
pour libérer automatiquement des ressources non mémoire.
Il existe également certaines fonctionnalités similaires entre C# et Java qui ont des différences subtiles mais importantes :
- Propriétés et indexeurs : les propriétés et les indexeurs (traitant une classe comme un tableau ou un dictionnaire) prennent en charge le langage. En Java, ils sont des conventions de nommage pour les méthodes commençant par
get
etset
. - Enregistrements: en C#, les enregistrements peuvent être des types
class
(référence) oustruct
(valeur). Les enregistrements C# peuvent être immuables, mais ne doivent pas être immuables. - Les tuples ont une syntaxe différente en C# et Java.
- Les attributs sont similaires aux annotations Java.
Enfin, il existe des fonctionnalités de langage Java qui ne sont pas disponibles en C# :
- Exceptions vérifiées : en C#, toute méthode peut éventuellement lever n’importe quelle exception.
- Vérification de la covariance des tableaux : en C#, les tableaux ne sont pas, en toute sécurité, covariants. Vous devez utiliser les classes et interfaces de collection génériques si vous avez besoin de structures covariantes.
Dans l’ensemble, l’apprentissage C# pour un développeur expérimenté en Java doit être fluide. Vous trouverez suffisamment d’expressions familières pour être rapidement productifs, et vous apprendrez les nouveaux conce rapidement.