Fogalmak és terminológia (funkcionális transzformáció)
Ez a rész bemutatja a tiszta funkcionális transzformációk alapfogalmát és terminológiáját. Az adatkonverzióval kapcsolatos funkcionális átalakításokat alkalmazó megközelítés olyan kódot generál, amely rendszerint gyorsabb a programozáshoz, kifejezőbb és könnyebben hibajavítható és karbantartható, mint a hagyományos imperatív programozással generált kód.
Ne feledje, hogy a jelen fejezetben szereplő témák nem igényelnek részletes magyarázatot a funkcionális programozásról. De meghatározzák azokat a funkcionális programozási szolgáltatásokat is, amelyek megkönnyítik az XML-formátum egyik formájából a másikra történő lefordítását.
A szakaszban egy tisztán funkcionális átalakítást egy olyan funkciók határozzák meg, amelyeket puszta funkcióknak neveznek. Ez lehetővé teszi, hogy egy strukturált adatkészletet alakítsunk át egyik formáról a másikra. A "tiszta" szó azt jelzi, hogy a funkciók lehetővé teszik a kompozíciót. amely megköveteli, hogy a következők legyenek.
Lezárva. vagyis szabadon kell megrendelni és rendezni, anélkül, hogy bevonnák a program fennmaradó részeit és kölcsönös függőségüket. A nettó transzformációknak nincs fogalma a környezetükről, és nem befolyásolják azt. Más szóval az átalakításban használt funkcióknak nincsenek mellékhatásai.
Mentés nélkül. vagyis ugyanaz a funkció vagy ugyanazon bemeneti adatokkal rendelkező bizonyos funkciók végrehajtása mindig ugyanazokat a kimeneti adatokat eredményezi. A nettó konverziók nem ismerik a korábbi felhasználásokat.
E leírás végéig a "tiszta funkció" kifejezést elsősorban a programozás megközelítésére használják, nem pedig a nyelv sajátos jellemzőire.
Megjegyezzük, hogy a tiszta funkciókat a C #-ben és a Visual Basic-ben végzett függvényként kell végrehajtani. (A Visual Basic-ben a rutinok nem adhatnak vissza értéket, ezért nem használják tisztán funkcionális átalakítások készítésére.)
Ezenkívül nem szabad összetévesztenie a tiszta funkciókat tisztán virtuális módszerekkel a C ++-ban. A második eset azt mutatja, hogy a zárt osztály absztrakt, és a metódus szövege nincs megadva.
Funkcionális programozás
A funkcionális programozás olyan programozási megközelítésre utal, amely közvetlenül támogatja a tisztán funkcionális átalakításokat.
Történelmileg az általános célú funkcionális programozási nyelvek, mint az ML, a Scheme, a Haskell és az F # (a Microsoft Research által kifejlesztett), a tudományos közösség fő érdeklődése volt. Annak ellenére, hogy mindig lehetett tisztán funkcionális átalakításokat írni a C # és a Visual Basic rendszerben, ez a vonzó lehetőség a legtöbb programozó számára összetettségük miatt. A C # 3.0-ban és a Visual Basic 9.0-ban azonban az új nyelvi konstrukciók, mint például a lambda kifejezések és típus definíciók, sokkal egyszerűbbé és produktívebbé tették a funkcionális programozást.
A funkcionális programozással kapcsolatos további információkért lásd: Funkcionális és kötelező programozás összehasonlítása.
Funkcionális programozási nyelvek
Annak ellenére, hogy a funkcionális programozás fő nyelvei nem széles körben használatosak, a speciális tárgyfunkcionális programozási nyelvek sikeresebbek. Például a többszöri stíluslap (CSS) segítségével sok weboldal megjelenését definiálják, és az XSLT-átalakításokat széles körben használják az XML adatfeldolgozásban. Az XSLT-ről további információkat az XSLT átalakítások című részben talál.
Az alábbi táblázatok meghatározzák a funkcionális transzformációkhoz kapcsolódó néhány feltételt.
magas rendű funkció (első osztály)
Olyan függvény, amely program objektumként értelmezhető. Például egy nagy megbízhatóságú funkció átvihető és visszaküldhető más funkciókból. A C # és a Visual Basic programban a kifejezések delegálása és a lambda kifejezések a nagy rendű függvényeket támogató nyelvi összetevők. Nagyrendű funkció megírásához egy vagy több érvet kell kijelölnie a küldöttek elfogadásához, a lambda kifejezésekkel általában. Számos szabványos lekérdezési operátor nagy megbízhatóságú funkció.
Valójában ez egy beépített névtelen funkció, amely akkor használható, ha a delegált típus ismeretlen. Ez a lambda kifejezések egyszerűsített jelentése, de elegendő ennek a bemutatónak a céljaira.
A strukturált adatkészlet általában a standard típus. A LINQ-val való kompatibilitás biztosítása érdekében a gyűjteménynek végre kell hajtania az IEnumerable interfészt vagy az IQueryable interfészt (vagy az egyik fő IEnumerator prototípusát
tuple (névtelen típusok)
Matematikai koncepcióként a tuple véges sorozata az objektumoknak, mindegyik egy bizonyos típusnak. A sort is rendezett listanak hívják. Az anonim típusok ennek a koncepciónak a nyelvhasználata, amely lehetővé teszi egy névtelen típusú osztály deklarálását, és ezzel egyidejűleg egy ilyen típusú példányt hoz létre.
típus definíció (rejtett gépelés)
A fordító képes egy változó típusának meghatározására kifejezett típusú nyilatkozat hiányában.
a késleltetett végrehajtás és a gyorsasági számítások
Végezze el a kifejezés kiértékelésének késleltetését, amíg eredményre nincs szükség. A gyűjteményekben támogatott a halasztott végrehajtás.
Ezeket a nyelvi jellemzőket kódmintákban használják ebben a szakaszban.