PF:Moduł Wstęp: Różnice pomiędzy wersjami
Linia 5: | Linia 5: | ||
co chcemy osiągnąć, a dopiero potem starać się to osiągnąć --- | co chcemy osiągnąć, a dopiero potem starać się to osiągnąć --- | ||
inaczej możemy uzyskać niezamierzone rezultaty. | inaczej możemy uzyskać niezamierzone rezultaty. | ||
Cel, do którego dążymy zwykle opisuje się w tzw. | Cel, do którego dążymy zwykle opisuje się w tzw. specyfikacji. | ||
Specyfikacja może być mniej lub bardziej formalna. | Specyfikacja może być mniej lub bardziej formalna. | ||
Jeśli jest sformalizowana, to nasz cel ma zwykle postać | Jeśli jest sformalizowana, to nasz cel ma zwykle postać | ||
Linia 18: | Linia 18: | ||
osiągnięcia celu. | osiągnięcia celu. | ||
Pojęcia te mają postać stałych i funkcji, stąd nazwa | Pojęcia te mają postać stałych i funkcji, stąd nazwa | ||
''programowanie funkcyjne''.Oczywiście tworzone funkcje są wykonywalne, tzn. | ''programowanie funkcyjne''.Oczywiście tworzone funkcje są wykonywalne, tzn. dostarczając | ||
argumentów możemy obliczyć ich wartości. | argumentów możemy obliczyć ich wartości. | ||
Weryfikacja programu funkcyjnego polega na udowodnieniu, że | Weryfikacja programu funkcyjnego polega na udowodnieniu, że | ||
Linia 25: | Linia 25: | ||
Charakterystyczne dla programowania funkcyjnego jest również to, | Charakterystyczne dla programowania funkcyjnego jest również to, | ||
że funkcje są | że funkcje są "obywatelami pierwszej kategorii", tzn. | ||
przysługują im wszystkie te prawa, co innym wartościom. | przysługują im wszystkie te prawa, co innym wartościom. | ||
W tej chwili nie jest jeszcze jasne o jakie prawa może chodzić. | W tej chwili nie jest jeszcze jasne o jakie prawa może chodzić. | ||
Linia 50: | Linia 50: | ||
Oczywiście, aby użyć pojęcia musimy je najpierw zdefiniować, a | Oczywiście, aby użyć pojęcia musimy je najpierw zdefiniować, a | ||
żeby uzyskać wynik funkcji musimy najpierw dostarczyć argumentów. | żeby uzyskać wynik funkcji musimy najpierw dostarczyć argumentów. | ||
W | W "czystym" programowaniu funkcyjnym nie występuje jednak | ||
pojęcie zmiennej, ani przypisania. | pojęcie zmiennej, ani przypisania. | ||
Nie ma też pętli, jako konstrukcji związanych z czasem i zmianą. | Nie ma też pętli, jako konstrukcji związanych z czasem i zmianą. |
Wersja z 14:18, 14 lip 2006
Porównanie paradygmatu funkcyjnego i imperatywnego
Jaki jest cel programowania? Pisząc program staramy się osiągnąć jakiś cel. Jak w każdej działalności, dobrze jest najpierw uzmysłowić sobie co chcemy osiągnąć, a dopiero potem starać się to osiągnąć --- inaczej możemy uzyskać niezamierzone rezultaty. Cel, do którego dążymy zwykle opisuje się w tzw. specyfikacji. Specyfikacja może być mniej lub bardziej formalna. Jeśli jest sformalizowana, to nasz cel ma zwykle postać relacji między danymi, a wynikami. Program, który tworzymy powinien mieścić się w ramach określonych przez specyfikację. Weryfikacja poprawności programu polega na sprawdzeniu, że faktycznie tak jest.
Paradygmat funkcyjny polega na tym, że pisząc program tworzymy pojęcia matematyczne, coraz bardziej skomplikowane, aż do osiągnięcia celu. Pojęcia te mają postać stałych i funkcji, stąd nazwa programowanie funkcyjne.Oczywiście tworzone funkcje są wykonywalne, tzn. dostarczając argumentów możemy obliczyć ich wartości. Weryfikacja programu funkcyjnego polega na udowodnieniu, że tworzone przez nas funkcje zawierają się w relacjach określonych przez specyfikacje (i są określone na odpowiednich dziedzinach).
Charakterystyczne dla programowania funkcyjnego jest również to, że funkcje są "obywatelami pierwszej kategorii", tzn. przysługują im wszystkie te prawa, co innym wartościom. W tej chwili nie jest jeszcze jasne o jakie prawa może chodzić. Można jednak śmiało powiedzieć, że jest to jedna z fundamentalnych zasad programowania funkcyjnego.
Porównajmy paradygmat funkcyjny i imperatywny. Programowanie imperatywne jest powszechnie znane. Na czym jednak polega paradygmat imperatywny? W naszych programach zwykle staramy się wymodelować istotny dla nas fragment otaczającego nas świata. Świat ten, składa się (na codzienny użytek) z przedmiotów. Przedmiotom tym odpowiadają w programach imperatywnych zmienne lub obiekty. Przedmioty w świecie rzeczywistym zmieniają się wraz z upływem czasu. Podobnie więc, zmienne i obiekty obdarzone są stanem, który może się zmieniać w czasie. Dane są to pewne przedmioty, na których należy wykonywać określone czynności, w wyniku których przeistoczą się one w wyniki. Upływ czasu w świecie rzeczywistym jest modelowany przez upływ czasu w komputerze, a zmiany stanów są realizowane przez przypisania.
Pojęcie czasu nie jest tak bardzo obecne w programach funkcyjnych. Oczywiście, aby użyć pojęcia musimy je najpierw zdefiniować, a żeby uzyskać wynik funkcji musimy najpierw dostarczyć argumentów. W "czystym" programowaniu funkcyjnym nie występuje jednak pojęcie zmiennej, ani przypisania. Nie ma też pętli, jako konstrukcji związanych z czasem i zmianą.