Jednořádkové metody
TLDR: Obalit jeden řádek kódu metodou může být někdy užitečné.
Dokážete na první pohled říct, co tento kód dělá?
public IEnumerable<Products> GetProducts()
{
//...
var orderedProducts = products.OrderBy(x => !x.IsDisabled);
//...
}
products.OrderBy(x => !x.IsDisabled)
přesune deaktivované produkty na konec seznamu. Není to nijak složité, ale na první pohled si nemusíme uvědomit, jak funguje řazení bool
proměnných – dává se true
na začátek a false
na konec? Nebo je to naopak?
Abychom čtení kódu zjednodušili, můžeme použít jednořádkovou metodu:
public IEnumerable<Product> PlaceDisabledProductsAtTheEnd(
this IEnumerable<Product> products)
{
return products.OrderBy(x => !x.IsDisabled);
}
// Použití
var orderedProducts = products.PlaceDisabledProductsAtTheEnd();
Nyní kód lépe vystihuje, co se snažíme udělat.
Příklad 2: Házení kostkou
Programujeme hru, ve které se postavy pohybují podle hodu kostkou. Někde v aplikaci máme následující kód:
public void DoMove()
{
//...
var step = random.Next(1,7);
//...
}
V tomto případě bychom také mohli generování čísla nahradit jednořádkovou metodou:
public int ThrowADice()
{
return random.Next(1,7);
}
Touto metodou navádíme čtenáře, aby si představil reálné házení kostkou a tím i hru, kterou programujeme.
Smalltalk od Martina Fowlera
Další příklad uvádí Martin Fowler: “Smalltalk in those days ran on black-and-white systems. If you wanted to highlight some text or graphics, you would reverse the video. Smalltalk’s graphics class had a method for this called ‘highlight’, whose implementation was just a call to the method ‘reverse’. The name of the method was longer than its implementation - but that didn’t matter because there was a big distance between the intention of the code and its implementation.”
V C# by mohl tento příklad vypadat následovně:
public void Main()
{
///...
_graphic.Reverse(text);
///...
}
Kentu Beckovi se tento kód nezdál dostatečně čitelný, a proto přidal následující metodu:
public void Highlight(string text)
{
_graphic.Reverse(text);
}
Závěr
Nebojte se jednořádkových metod. V některých případech mohou zjednodušit čtení kódu.