A nazorny priklad:
Uplna novinka v Jave 8 (rok 2014):
public Optional<Article> getFirstJavaArticle() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.findFirst();
}
A naproti tomu, LINQ v C#, ktery je s nama od roku 2007:
public Article GetFirstJavaArticle()
{
return articles.FirstOrDefault(x => x.Tags.Contains("Java");
}
Co vam pripada prehlednejsi, citelnejsi a jednodussi na nauceni??
Hlavní na první pohled každý ten kód dělá něco jiného. Ten Javovský vezme všechny články, z nich vybere ty, které mají štítek Java, a z nich vybere první. Ten C# kód vezme články, z nich vezme první nebo výchozí, a u něj asi zkontroluje, zda obsahuje štítek Java. Alespoň to tak vypadá.
Jednodušší na naučení je podle mne to, kde se nic učit nemusím, protože správný význam je patrný i bez učení. Uniká my smysl toho, proč bych se měl učit, že FirstOrDefault může mít jako parametr predikát, který nejprve filtruje množinu a pak až vrací první záznam (proč nedělá třeba to, co jsem popsal výše, tedy že by rozhodl, zda první záznam odpovídá predikátu?), a proč bych se měl učit, že kód musím číst střídavě zleva doprava a zprava doleva.