LINQ to XML, cz. 2 - Wstęp do zapytań
Nawet pobieżna analiza powyższych zapytań prowadzi do takich przemyśleń:
- wygląda na to, że w Linq To Xml nie używa się wyrażeń XPath
- wprowadzone zostało jakieś tajemnicze słówko "var"
Q: Czy w Linq to Xml nie używa się wyrażeń XPath?
A: I tak i nie. W zapytaniach zalecane jest stosowanie metod odpowiadających mniej lub bardziej osiom (axes) w wyrażeniach XPath. To - wraz z klauzulą where (jeszcze nie wprowadzoną) oraz wyrażeniami lambda (o tym w późniejszych odcinkach cyklu) w zasadzie umożliwia wybieranie węzłów z dokumentów Xmlowych bez konieczności używania wyrażeń XPath. Miłośnicy (wielbiciele?) XPath mogą używać wyrażeń XPath podczas pracy z Linq To Xml (zaimplementowanych jako metody rozszerzające (ang. extension methods) w przestrzeni nazw System.Xml.XPath) jednak okupione to jest sporą stratą wydajności zapytań.
Q: Co to jest "var"?
A: var jest wprowadzonym w C# 3.0 słowem kluczowym, które mówi kompilatorowi, żeby sam określił/wywnioskował typ zmiennej (ang. implicit type). Najłatwiej zrozumieć to na przykładzie (z msdn'a swoją drogą):
var i = 10; // implicitly typed
int i = 10; // explicitly typed
W obu przypadkach typ zmiennej i jest taki sam - int. Różnica jest taka, że w pierwszym przypadku to kompilator określa (wnioskuje) typ zmiennej podczas gdy w drugim przypadku jest to programista.
Jest jeszcze jeden przypadek, w którym stosuje się słowo kluczowe "var" (tak naprawde jest to wtedy obowiązkowe) - mianowicie klasy anonimowe (ang. anonymous classes). Klasy anonimowe są często stosowane wraz zapytaniami Linqowymi więc temat ten na pewno będzie jeszcze poruszony w dalszych odcinkach cyklu.
Dygresja: Moja osobista opinia na temat słowa "var" jest taka, że w zasadzie powinno się go unikać. Jednym z wyjątków jest Linq - praca z klasami anonimowymi wymusza używanie "var", a stosowanie np. IEnumerable<XElement> zamiast "var" (taki jest typ zmiennej wyloty z przykładowych zapytań), aż tyle nie wnosi.
