J'aime le C#, même si je ne connais pas grand chose sur son histoire. Je pourrais vous donnez des infos comme un nom que vous oublirez ou l'année de sa création (il a été créé en 2001, l'année de ma naissance), mais ce sont des infos qu'on oubli vite (surtout moi).
Ce qui faut tout de même savoir c'est que le C# a été créé par Microsoft pour être un rival direct de Java. Mais je ne vais pas m'amuser à les comparés, Java est plutôt conservateur, ce n'est pas un secret et ni même un défaut car ça permet que le tout soit robuste et garantissant la compatibilité. Mais le C# reste plus moderne, avec une forte flexibilité des syntaxes et une forte compatibilité à des IDE puissants (tel que Rider)
Pourquoi le C#
Le C# a été conçu pour à la fois être efficace pour le développement d'application, mais aussi pour le développement web. C'est un langage Orienté-Objet, ce qui veut dire qu'on peut créer des instances d'une class, par exemple on peut avoir plusieurs instance de User fonctionnant tous de la même manière, mais avec des paramètres différents.
Il n'a pas été pensé seul, le C# se suit presque obligatoirement avec .Net, ce qui permet de réaliser des programmes plus complexe demandant de : la gestion réseau, sérialisation, multhreading, etc...
Et ça marche super bien ! La preuve, beaucoup d'application Windows sont réalisé en C#, le moteur de jeu Unity est en C# et ce site exceptionnel à été aussi fait en C#, sans parler de Hamster Life qui devinait quoi ? Est en réalisation avec le langage de programmation, que vous connaissez, car, c'est, le, C# !
Moderne
Un exemple très simple sur sa modernité (et ça sera la seule chose que je vais comparé avec Java) :
public class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
Voici, comment écrire "Hello World" en C#, ça a exactement la même structure qu'en Java. Du moins, ça c'était ce qui était avant obligatoire, maintenant ça ressemble à ça :
Console.WriteLine("Hello World");
Voilà... Aujourd'hui, vous pouvez écrire "Hello World", d'une manière aussi simple que dans un langage de haut niveau. Après pour des raisons pratiques, on peut décider de choisir le format, ça ne change pas grand chose et ça facilite même les nouveaux arrivant sur l'apprentissage de ce langage. Mais c'est un exemple clé, sur le fait que comparé à Java par exemple, le C# cherche à rester moderne et efficace !
Vous trouverez évidemment certaine chose que le C# propose sur d'autre langage, mais le C# à soit une meilleur intégration ou englobe beaucoup plus de fonctionnalitées.
Il ne faut alors pas être étonné si je vous montre une fonctionnalitée et qu'elle n'est pas unique à ce langage !
Expression-bodied
Comment transformer 4 lignes de codes en une seule ? Utilisez une expression-bodied !
// Normal :
private void Example()
{
Console.WriteLine("Coucou");
}
// Expression-bodied :
private void Example() => Console.WriteLine("Coucou");
C'est une façons de rendre le code moins conséquant quand on a besoin d'éxécuter qu'une seule ligne, mais pas seulement !
// Normal
public class MaClass
{
private string hello;
private string number;
public MaClass(string hello, int number)
{
this.hello = hello;
this.number = number;
}
// Le reste du code
}
// Expression-bodied
public class MaClass(string hello, int number)
{
// Le reste du code...
}
Un autre exemple d'une utilisation poussé cette fois-ci de l'expression-bodied, où elle est incorporée efficacement pour la construction d'une class.
Gestion de déconstruction
J'avouerais que c'est un peu difficile à montrer toute les possibilités, mais ça permet récupérer les données d'une instance et de les mettre dans des variables individuels.
(int x, int y) = GetVector2();
grâce à ça par exemple une fonction peu retuner plusieurs valeur déconstruite :
public (int x, int y) GetVectorRight()
{
return (1, 0);
}
Je vous l'avoue ce n'est pas quelque chose de très commun à faire, mais sur certain cas ça peut sembler efficace !
record
C'est un moyen efficace d'avoir une syntaxe qui simplifie le fait de vouloir manipuler que des données et non pas leur comportement.
C'est toute une forte fonctionnalitée permettant de toujours et encore rédiger du code efficacement avec une syntaxe clair et précise :
// Il n'est pas obligatoire de mettre class, mais... je préfère...
public class record Person(string firstName, string lastName);
Au premier coup d'oeil ça ressemble à l'Expression-bodied, mais avec un record il est clair et précis que l'objectif n'est pas d'avoir de comportement mais plutôt des valeurs.
var person1 = new Person("John", "Doe");
var person2 = person1 with { lastName = "Smith" };
Il est ensuite possible avec with de copié un record et d'y apporter une modification comme ici pour le changement du lastName
.
Nullable Reference
Alors c'est un détail un peu particulier, mais en C# on peut avoir des class et des structs, les structs donne à chaque fois les valeurs et les class donnent la référence.
Et techniquement, ça fait que les structs ne peuvent être null, car on pourrait ne pas avoir de référence, mais on ne peut pas ne pas avoir de valeur. VOUS SUIVEZ ?!
Bref, Nullable Reference permet de spécifier qu'on s'attends à ce qu'il puisse être null, c'est efficace pour les structs car ça casse un peu le principe qu'il ne puisse pas être null.
Et ce qui d'autant plus efficace c'est qu'il suffit d'ajouter simplement ?
pour dire qu'on s'attends à ce qu'il soit null et ça peut-être mit à plusieurs endroits :
// Pour un paramètre d'une fonction
public void Hello(int? id)
{
var user = GetUser();
user?.Show(); // Ou pour ignorer si il est à null (le GetUser() n'ayant rien donné).
// Il est même possible de faire :
id ??= 0; // Ce qui permet de mettre 0 si il est null.
}
Tous ça permet de faire des vérifications sans ajouter de surplus rendant le code moins lisible.
C# <3 IDE
J'ai utilisé quelques langages et par expérience seul le C# a toujours été le langage le plus clair et précis dans un IDE.
Avec le fait que Rider soit gratuit pour une utilisation non-commercial, je conseille fortement d'essayer tout ça. OUI JE FAIS UNE PROMO ! Car oui Jetbrains font les meilleurs IDE qui soit, mais à mes yeux aucun n'a excellé autant sur son devoir que Rider et ça grâce à un langage logique de A à Z.
Je dois dire, j'ai jamais été perdu avec le C#, ce n'est pas seulement parce qu'il est typé, mais parce qu'il implémente des fonctionnalités solides.
J'avoue le tout est un peu brouillon, mais il y a tellement, tellement de chose à dire...
C'est juste que je me rend compte que je néglige plein de chose sur ce que tout est dit que ça me motive plus trop à en parler. Non pas parce que ce n'est pas passionnant, mais je risque d'écrire 3 livres sur le sujet.
Après je comprends que ce n'est pas LE langage de programmation, mais il est tellement efficace sur ce qu'il fait et surtout que je trouve ça top que c'est un langage qui ne cesse d'évoluer non pas pour faire gadget comme le JS, mais pour être un langage à la pointe de la technologie.
Donc voilà, j'espère que certaine chose vous donnera envi de le découvrir, j'ai vraiment négligé beaucoup de chose, mais il suffit de l'essayer pour voir à quel point il excelle sur ses domaines !