Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

C# Quick Tip

[new:30/05/2015]Vite fait, un peu de C# et un rappel sur la façon d’écrire du code de type “inline” ou de recréer les sous-fonctions du Pascal qui n’existent pas.

Quick c’est quick, c’est même fast

Pas de blabla, il suffit de regarder le code ci-dessous avec un exemple de la sortie produite pour comprendre tout l’intérêt de ce style d’écriture. Définir une fonction (ou méthode) dans une autre est certainement la chose la plus intéressante de mon point vue. Ancien Pascalien, j’ai toujours trouvé dommage qu’il faille déclarer une méthode private de plus juste pour découper un algorithme là où des sous-fonctions sont milles fois plus efficaces.

Au fil de ses évolutions C# s’est tellement sophistiqué qu’on peut presque tout faire, même des sous-fonction à la Pascal.

Bref voici le code copier tout droit de LinqPad dont on ne dit jamais assez de bien :

        //calcul
	var add = new Func<int,int,int>((i,ii)=>{return i+ii;});
	var a1 = add(add(add(1,2),3),4);
	Console.WriteLine(add(5,8)+" "+a1);
	
	//chaînes
	var normalize = new Func<string,string>((s)=>{return s.Trim().ToUpper();});
	var c="    test   ";
	Console.WriteLine(">"+normalize(c)+"<");
	
	// dicos
	var dico = new Func<Dictionary<int,string>>(()=>
	{
		return new Dictionary<int,string> 
		{
			{0,"zéro"},
			{1,"un"},
			{2,"deux"},
			{3,"trois"}
		};
	})();
	
	Console.WriteLine(dico[2]);
	
	// multiplier + tostring
	Func<int,int,string> AddToStr = (i,ii) => (i+ii).ToString();
	
	var x = "5+3= "+AddToStr(5,3);
	Console.WriteLine(x);
	
	// sans param et chaînage
	Func<string> TenBlankChars = ()=> new string(' ',10);
	var k = "1"+TenBlankChars()+"2";
	Console.WriteLine("k: '{0}' Longueur: {1}",k,k.Length);
	Func<string> OneCol = () => TenBlankChars()+"|";
	Func<string> TenCol = () => string.Concat(Enumerable.Repeat(OneCol(),10));
	
	Console.WriteLine(TenCol());

 

Et voici la sortie :

13 10
>TEST<
deux
5+3= 8
k: '1          2' Longueur: 12
          |          |          |          |          |          |          |          |          |          |

 

Conclusion

Quick, c’est quick.

Pas de révélation choc ici, mais juste un petit rappel de la puissance de C# car je ne vois que très rarement du code utiliser ce type d’écriture pourtant très efficace et évitant souvent la création de méthodes privées utilisées une seule fois et qui polluent les classes.

Si vous le saviez, et bien servez-vous en ! Et si vous aviez zappé cet aspect de la syntaxe de C#, adoptez-le sans tarder !

Et Stay Tuned :

blog comments powered by Disqus