Koncepty a terminologie (funkční transformace) (LINQ to XML)
Tento článek představuje koncepty a terminologii čistých funkčních transformací. Přístup k funkční transformaci dat přináší kód, který je často rychlejší programovat, vyjádřitji a snadněji ladit a udržovat než tradiční imperativní programování.
Všimněte si, že články v této části nejsou určené k úplnému vysvětlení funkčního programování. Místo toho tyto články identifikují některé z funkcí funkčního programování, které usnadňují transformaci XML z jednoho obrazce do druhého.
Co je čistě funkční transformace
V čistě funkční transformaci definuje sada funkcí označovaných jako čisté funkce, jak transformovat sadu strukturovaných dat z původní formy do jiného formuláře. Slovo "čisté" označuje, že funkce jsou kompozovatelné, což vyžaduje, aby byly:
- Samostatně obsažené, aby bylo možné je volně uspořádat a přeuspořádat bez propletení nebo vzájemné závislosti se zbytkem programu. Čisté transformace nemají žádné znalosti ani vliv na jejich prostředí. To znamená, že funkce použité v transformaci nemají žádné vedlejší účinky.
- Bezstavové, takže provedení stejné funkce nebo konkrétní sady funkcí na stejném vstupu bude vždy mít za následek stejný výstup. Čisté transformace nemají žádnou paměť o jejich předchozím použití.
Důležité
Ve zbytku tohoto kurzu se pojem "čistá funkce" používá v obecném smyslu k označení programovacího přístupu, nikoli ke konkrétní funkci jazyka.
Všimněte si, že čisté funkce musí být implementovány jako metody v jazyce C# a jako funkce v jazyce Visual Basic.
V jazyce C++ byste neměli zaměňovat čisté funkce s čistě virtuálními metodami. Druhá označuje, že obsahující třída je abstraktní a že není zadán žádný tělo metody.
Funkční programování
Funkční programování je programovací přístup, který přímo podporuje čistou funkční transformaci.
Historicky, funkční programovací jazyky pro obecné účely, jako jsou ML, Scheme, Haskell a F#, byly primárně zajímavé pro akademické komunity. I když bylo vždy možné psát čisté funkční transformace v jazyce C# a Visual Basic, obtížné to udělat tak nebylo atraktivní možností pro většinu programátorů. V nedávných verzích těchto jazyků ale nové jazykové konstrukce, jako jsou výrazy lambda a odvozování typu, usnadňují a produktivnější funkční programování.
Další informace o funkčním programování naleznete v tématu Funkční programování vs. imperativní programování.
Funkční programovací jazyky specifické pro doménu
I když obecné funkční programovací jazyky nebyly široce přijaty, některé funkční programovací jazyky specifické pro doménu měly lepší úspěch. Šablony stylů CSS (Cascading StyleSheet) se například používají k určení vzhledu a chování mnoha webových stránek a šablon stylů XSLT (Extensible Stylesheet Language Transformations) se ve velké míře používají při manipulaci s daty XML. Další informace o XSLT naleznete v tématu Transformace XSLT.
Terminologie
Následující seznam definuje některé termíny související s funkčními transformacemi.
vyšší pořadí (prvotřídní) funkce
Funkce, která může být považována za programový objekt. Například funkci vyššího řádu lze předat nebo vrátit z jiných funkcí. V jazyce C# a Visual Basic jsou delegáty a výrazy lambda jazykovými funkcemi, které podporují funkce vyššího pořadí. Pokud chcete napsat funkci vyššího řádu, deklarujete jeden nebo více argumentů, které mají převzít delegáty, a při volání často používáte výrazy lambda. Mnoho standardních operátorů dotazu je funkcí vyššího pořadí.
Další informace najdete v tématu Přehled operátorů standardních dotazů (C#) a Přehled operátorů standardních dotazů (Visual Basic).
výraz lambda
V podstatě je vložená anonymní funkce, která se dá použít všude, kde se očekává typ delegáta. Toto je zjednodušená definice výrazů lambda, ale je vhodná pro účely tohoto kurzu.
Další informace najdete v tématu Výrazy lambda (Průvodce programováním v C#) a výrazy lambda (Visual Basic)).
Kolekce
Strukturovaná sada dat, obvykle uniformního typu. Aby byla kompatibilní s JAZYKEM LINQ, musí kolekce implementovat IEnumerable rozhraní nebo IQueryable rozhraní (nebo jeden z jejich obecných protějšků IEnumerator<T> nebo IQueryable<T>).
řazená kolekce členů (anonymní typy)
Matematický koncept, řazená kolekce členů je konečná posloupnost objektů, každý z konkrétního typu. Řazená kolekce členů se také označuje jako uspořádaný seznam. Anonymní typy jsou jazykovou implementací tohoto konceptu, která umožňuje deklarovat bez názvu typu třídy a objekt tohoto typu se vytvoří instance současně.
Další informace najdete v tématu Anonymní typy (Průvodce programováním v C#) a Anonymní typy (Visual Basic).
odvození typu (implicitní psaní)
Schopnost kompilátoru určit typ proměnné bez explicitní deklarace typu.
Další informace najdete v tématu Implicitně zadané místní proměnné (Průvodce programováním v C#) a Odvození místního typu (Visual Basic).
odložené provádění a opožděné vyhodnocení
Zpoždění vyhodnocení výrazu, dokud se jeho vyřešená hodnota skutečně nevyžaduje. Odložené spouštění se podporuje v kolekcích.
Další informace o jazyce C# najdete v tématu Úvod k dotazům LINQ (C#) a Odložené provádění a opožděné vyhodnocení v JAZYCE LINQ to XML (C#).
Další informace jazyka Visual Basic naleznete v tématu Základní operace dotazů (Visual Basic) a Odložené provádění a opožděné vyhodnocení v JAZYCE LINQ to XML (Visual Basic).
Tyto jazykové funkce se použijí v ukázkách kódu v této části.