Udostępnij za pośrednictwem


Pojęcia i terminologia (transformacja funkcjonalna) (LINQ to XML)

W tym artykule przedstawiono pojęcia i terminologię czystych przekształceń funkcjonalnych. Podejście transformacji funkcjonalnej do przekształcania danych daje kod, który jest często szybszy do programowania, bardziej wyrazistego i łatwiejszego do debugowania i konserwacji niż bardziej tradycyjnego programowania imperatywnego.

Należy pamiętać, że artykuły w tej sekcji nie są przeznaczone do pełnego wyjaśnienia programowania funkcjonalnego. Zamiast tego te artykuły identyfikują niektóre funkcje programowania funkcjonalnego, które ułatwiają przekształcanie kodu XML z jednego kształtu na inny.

Co to jest czysta transformacja funkcjonalna

W czystej transformacji funkcjonalnej zestaw funkcji, nazywany czystymi funkcjami, definiuje sposób przekształcania zestawu danych strukturalnych z oryginalnej formy w inną formę. Słowo "czysty" wskazuje, że funkcje są komponowalne, co wymaga, aby były:

  • Samodzielny, dzięki czemu można je swobodnie porządkować i rozmieszczać bez splątania lub współzależności z resztą programu. Czyste przekształcenia nie mają wiedzy ani wpływu na ich środowisko. Oznacza to, że funkcje używane w transformacji nie mają skutków ubocznych.
  • Bezstanowe, dzięki czemu wykonanie tej samej funkcji lub określonego zestawu funkcji na tych samych danych wejściowych zawsze spowoduje wyświetlenie tych samych danych wyjściowych. Czyste przekształcenia nie mają pamięci o ich wcześniejszym użyciu.

Ważne

W pozostałej części tego samouczka termin "czysta funkcja" jest używany w ogólnym sensie, aby wskazać podejście programistyczne, a nie konkretną funkcję języka.

Należy pamiętać, że czyste funkcje muszą być implementowane jako metody w języku C# i jako funkcje w Visual Basic.

Nie należy mylić czystych funkcji z czystymi metodami wirtualnymi w języku C++. Ten ostatni wskazuje, że zawierająca klasa jest abstrakcyjna i że żadna treść metody nie jest dostarczana.

Programowanie funkcjonalne

Programowanie funkcjonalne to podejście programistyczne, które bezpośrednio obsługuje czystą transformację funkcjonalną.

Historycznie języki programowania funkcjonalnego ogólnego przeznaczenia, takie jak ML, Scheme, Haskell i F#, były przede wszystkim interesujące dla społeczności akademickiej. Chociaż zawsze było możliwe pisanie czystych przekształceń funkcjonalnych w języku C# i Visual Basic, trudności z tym nie sprawiły, że była to atrakcyjna opcja dla większości programistów. Jednak w ostatnich wersjach tych języków nowe konstrukcje języka, takie jak wyrażenia lambda i wnioskowanie typów, znacznie ułatwiają i wydajniejsze programowanie funkcjonalne.

Aby uzyskać więcej informacji na temat programowania funkcjonalnego, zobacz Programowanie funkcjonalne a programowanie imperatywne.

Języki programowania funkcjonalnego specyficzne dla domeny

Chociaż ogólne języki programowania funkcjonalnego nie zostały powszechnie przyjęte, niektóre języki funkcjonalne specyficzne dla domeny miały lepszy sukces. Na przykład kaskadowe arkusze stylów (CSS) służą do określania wyglądu i działania wielu stron internetowych, a rozszerzone arkusze stylów przekształcenia języka (XSLT) są szeroko używane w manipulowaniu danymi XML. Aby uzyskać więcej informacji na temat XSLT, zobacz Przekształcenia XSLT.

Terminologia

Poniższa lista definiuje niektóre terminy związane z przekształceniami funkcjonalnymi.

wyższa kolejność (pierwsza klasa) — funkcja
Funkcja, która może być traktowana jako obiekt programowy. Na przykład funkcja wyższej kolejności może zostać przekazana lub zwrócona z innych funkcji. W językach C# i Visual Basic delegaty i wyrażenia lambda są funkcjami językowymi obsługującymi funkcje wyższego rzędu. Aby napisać funkcję o wyższej kolejności, należy zadeklarować co najmniej jeden argument do przejęcia delegatów i często używasz wyrażeń lambda podczas wywoływania. Wiele standardowych operatorów zapytań to funkcje o wyższej kolejności.

Aby uzyskać więcej informacji, zobacz Omówienie standardowych operatorów zapytań (C#) i Standardowe operatory zapytań — omówienie (Visual Basic).

wyrażenie lambda
Zasadniczo funkcja anonimowa śródwierszowa, która może być używana wszędzie tam, gdzie oczekiwano typu delegata. Jest to uproszczona definicja wyrażeń lambda, ale jest odpowiednia na potrzeby tego samouczka.

Aby uzyskać więcej informacji, zobacz Wyrażenia lambda (Przewodnik programowania w języku C#) i Wyrażenia lambda (Visual Basic))..

Kolekcji
Ustrukturyzowany zestaw danych, zwykle jednolity typ. Aby być zgodnym z LINQ, kolekcja musi zaimplementować IEnumerable interfejs lub IQueryable interfejs (lub jeden z ich ogólnych odpowiedników IEnumerator<T> lub IQueryable<T>).

krotka (typy anonimowe)
Pojęcie matematyczne, krotka jest skończona sekwencja obiektów, każdy z określonego typu. Krotka jest również znana jako uporządkowana lista. Typy anonimowe to implementacja języka tej koncepcji, która umożliwia zadeklarowanie nienazwanego typu klasy i utworzenie wystąpienia obiektu tego typu w tym samym czasie.

Aby uzyskać więcej informacji, zobacz Typy anonimowe (Przewodnik programowania w języku C#) i Typy anonimowe (Visual Basic).

wnioskowanie typu (niejawne wpisywanie)
Możliwość kompilatora określania typu zmiennej w przypadku braku jawnej deklaracji typu.

Aby uzyskać więcej informacji, zobacz Niejawnie wpisane zmienne lokalne (Przewodnik programowania w języku C#) i Wnioskowanie typów lokalnych (Visual Basic).

odroczone wykonanie i leniwa ocena
Opóźnienie obliczania wyrażenia do momentu rzeczywistego wymagania rozpoznanej wartości. Odroczone wykonywanie jest obsługiwane w kolekcjach.

Aby uzyskać więcej informacji w języku C#, zobacz Introduction to LINQ Queries (C#) (Wprowadzenie do zapytań LINQ (C#) oraz Odroczone wykonywanie i opóźniona ocena w linQ to XML (C#).

Aby uzyskać więcej informacji w języku Visual Basic, zobacz Podstawowe operacje zapytań (Visual Basic) i Odroczone wykonywanie oraz Ocena leniwa w linQ to XML (Visual Basic).

Te funkcje językowe będą używane w przykładach kodu w tej sekcji.

Zobacz też