Dela via


Begrepp och terminologi (funktionell transformering) (LINQ till XML)

Den här artikeln beskriver begrepp och terminologi för rena funktionella transformeringar. Den funktionella transformeringsmetoden för att transformera data ger kod som ofta är snabbare att programmera, mer uttrycksfull och enklare att felsöka och underhålla än mer traditionell, imperativ programmering.

Observera att artiklarna i det här avsnittet inte är avsedda att helt förklara funktionell programmering. I stället identifierar de här artiklarna några av de funktionella programmeringsfunktioner som gör det enklare att transformera XML från en form till en annan.

Vad är ren funktionell omvandling

I ren funktionell transformering definierar en uppsättning funktioner, som kallas rena funktioner, hur du omvandlar en uppsättning strukturerade data från dess ursprungliga form till ett annat formulär. Ordet "ren" anger att funktionerna är skrivbara, vilket kräver att de är:

  • Fristående, så att de kan ordnas fritt och ordnas om utan sammanflätning eller beroenden med resten av programmet. Rena omvandlingar har ingen kunskap om eller effekt på sin miljö. Det vill: de funktioner som används i omvandlingen har inga biverkningar.
  • Tillståndslös, så att körning av samma funktion eller specifik uppsättning funktioner på samma indata alltid resulterar i samma utdata. Rena transformeringar har inget minne av tidigare användning.

Viktigt!

I resten av den här självstudien används termen "ren funktion" i allmän mening för att indikera en programmeringsmetod och inte en specifik språkfunktion.

Observera att rena funktioner måste implementeras som metoder i C# och som funktioner i Visual Basic.

Du bör inte blanda ihop rena funktioner med rena virtuella metoder i C++. Det senare anger att den innehållande klassen är abstrakt och att ingen metodtext anges.

Funktionell programmering

Funktionell programmering är en programmeringsmetod som direkt stöder ren funktionell transformering.

Tidigare har allmänna funktionella programmeringsspråk, som ML, Scheme, Haskell och F#, främst varit av intresse för den akademiska communityn. Även om det alltid har varit möjligt att skriva rena funktionella transformeringar i C# och Visual Basic, har svårigheten att göra det inte gjort det till ett attraktivt alternativ för de flesta programmerare. I de senaste versionerna av dessa språk gör dock nya språkkonstruktioner som lambda-uttryck och typinferens funktionell programmering mycket enklare och mer produktiva.

Mer information om funktionell programmering finns i Funktionell programmering kontra imperativ programmering.

Domänspecifika funktionella programmeringsspråk

Även om allmänna funktionella programmeringsspråk inte har antagits i stor utsträckning har vissa domänspecifika funktionella programmeringsspråk fått bättre framgång. Till exempel används CSS (Cascading Style Sheets) för att fastställa utseendet och känslan på många webbsidor, och XSLT-formatmallar (Extensible Stylesheet Language Transformations) används i stor utsträckning i XML-datamanipulering. Mer information om XSLT finns i XSLT-transformeringar.

Terminologi

I följande lista definieras vissa termer som rör funktionella transformeringar.

funktionen higher-order (förstklassig)
En funktion som kan behandlas som ett programmatiskt objekt. Till exempel kan en funktion med högre ordning skickas till eller returneras från andra funktioner. I C# och Visual Basic är ombud och lambda-uttryck språkfunktioner som stöder funktioner i högre ordning. Om du vill skriva en funktion med högre ordning deklarerar du ett eller flera argument för att ta ombud, och du använder ofta lambda-uttryck när du anropar den. Många av standardfrågeoperatorerna är funktioner med högre ordning.

Mer information finns i Översikt över vanliga frågeoperatorer (C#) och Översikt över standardfrågasoperatorer (Visual Basic).

lambda-uttryck
I princip en infogad anonym funktion som kan användas varhelst en ombudstyp förväntas. Det här är en förenklad definition av lambda-uttryck, men den är lämplig för den här självstudien.

Mer information finns i Lambda-uttryck (C#-programmeringsguide) och Lambda-uttryck (Visual Basic)).

Samling
En strukturerad uppsättning data, vanligtvis av en enhetlig typ. För att vara kompatibel med LINQ måste en samling implementera IEnumerable gränssnittet eller IQueryable gränssnittet (eller någon av deras generiska motsvarigheter, IEnumerator<T> eller IQueryable<T>).

tuppeln (anonyma typer)
Ett matematiskt begrepp, en tuppeln är en begränsad sekvens av objekt, var och en av en viss typ. En tuppeln kallas även för en ordnad lista. Anonyma typer är en språkimplementering av det här konceptet, som gör det möjligt att deklarera en icke namngiven klasstyp och att ett objekt av den typen instansieras samtidigt.

Mer information finns i Anonyma typer (C#-programmeringsguide) och Anonyma typer (Visual Basic).

typinferens (implicit inmatning)
Möjligheten för en kompilator att fastställa typen av en variabel i avsaknad av en explicit typdeklaration.

Mer information finns i Implicit inskrivna lokala variabler (C#-programmeringsguide) och Lokal typinferens (Visual Basic).

uppskjuten körning och lat utvärdering
Fördröjningen av utvärderingen av ett uttryck tills dess lösta värde faktiskt krävs. Uppskjuten körning stöds i samlingar.

Mer C#-information finns i Introduktion till LINQ-frågor (C#) och Uppskjuten körning och Lat utvärdering i LINQ till XML (C#).

Mer information om Visual Basic finns i Grundläggande frågeåtgärder (Visual Basic) och Uppskjuten körning och Lat utvärdering i LINQ till XML (Visual Basic).

Dessa språkfunktioner används i kodexempel i det här avsnittet.

Se även