Dans le genre syntaxes multiples on est pas mal en C#…
Rapport aux Delegates / Lambdas:
private static int Compare(int x, int y)
{
return z - y;
}
// Syntaxe C# 1.0 + Génériques (C# 2.0)
public static void SortArray1(int[] array)
{
Array.Sort(array, new Comparison<int>(Compare)); // Les génériques n'existent pas en C# 1.0 mais la syntaxe "new DelegateType()" est obligatoire. Bref, j'ai pas eu envie de chercher un meilleur exemple ;p
}
// C# 2.0
public static void SortArray2(int[] array)
{
Array.Sort(array, Compare); // Plus obligé d'utiliser la syntaxe "new DelegateType()"
}
// C# 2.0
public static void SortArray3(int[] array)
{
Array.Sort(array, (Comparison<int>)Compare); // Du coup on peut aussi forcer le typage sans utiliser la syntaxe "new DelegateType()" même si ça sert souvent à rien.
}
// C# 2.0 (Syntaxe totalement obsolète mais totalement valide)
public static void SortArray4(int[] array)
{
Array.Sort(array, delegate (int x, int y) { return x - y; });
}
// C# 3.0
public static void SortArray5(int[] array)
{
Array.Sort(array, (x, y) => x - y);
}
// C# 6.0 (Maximum concision)
public static void SortArray6(int[] array) => Array.Sort(array, (x, y) => x - y);
Et pour les propriétés on est pas mal aussi
// C# 1.0
private int _a;
public int A { get { return _a; } set { _a = value; } }
private readonly int _b;
public int B { get { return _b; } }
public int C { get { return 3; } }
// C# 3.0
public int A { get; set; }
private readonly int _b;
public int B { get { return _b; } }
public int C { get { return 3; } }
// C# 6.0
public int A { get; set; }
public int B { get; }
public int C => 3;
Malgré tout je pense que ça ne sera jamais pire qu'en C++, mais c'est là qu'on voit qu'en évoluant, les langages se tapent un petit paquet de vielles casseroles. Je suis pas sûr que ce soit évitable de toutes façons.
Je pense que le plus drôle à ce niveau c'est de regarder JavaScript. La future version est magnifique de fonctionnalités, mais une grosse grosse partie c'est du sucre syntaxique sur des structures chiantes à créer.
(Sinon, j'ai trouvé la présentation sur les défauts de C++ en
./1369 très bien
. C'est évidemment un peu trollatoire, mais ça soulève beaucoup de vrais points.)
./1382 > Généralement, j'ai tendance à utiliser plus while (true) que while (condition) quand je code… La plupart du temps quand j'utilise un while, c'est une boucle aux conditions de sortie non triviales donc ça rentre bien dans aucune case. (goto programming FTW !)