Naprawdę trudno mi zrozumieć różnicę między paradygmatami programowania proceduralnego i funkcjonalnego .
Oto pierwsze dwa akapity z wpisu Wikipedii na temat programowania funkcjonalnego :
W informatyce programowanie funkcjonalne jest paradygmatem programowania, który traktuje obliczenia jako ocenę funkcji matematycznych i unika danych stanu i zmiennych. Podkreśla zastosowanie funkcji, w przeciwieństwie do imperatywnego stylu programowania, który kładzie nacisk na zmiany stanu. Programowanie funkcjonalne ma swoje korzenie w rachunku lambda, formalnym systemie opracowanym w latach trzydziestych XX wieku w celu badania definicji funkcji, zastosowania funkcji i rekurencji. Wiele funkcjonalnych języków programowania można traktować jako rozwinięcia rachunku lambda.
W praktyce różnica między funkcją matematyczną a pojęciem „funkcji” używanym w programowaniu imperatywnym polega na tym, że funkcje imperatywne mogą mieć skutki uboczne, zmieniając wartość stanu programu. Z tego powodu brakuje im referencyjnej przejrzystości, tzn. To samo wyrażenie językowe może skutkować różnymi wartościami w różnym czasie, w zależności od stanu wykonywanego programu. I odwrotnie, w kodzie funkcyjnym wartość wyjściowa funkcji zależy tylko od argumentów wprowadzonych do funkcji, więc
f
dwukrotne wywołanie funkcji z tą samą wartością argumentux
da ten sam wynikf(x)
oba razy. Eliminacja skutków ubocznych może znacznie ułatwić zrozumienie i przewidywanie zachowania programu, co jest jedną z kluczowych motywacji dla rozwoju programowania funkcjonalnego.
W ust. 2, gdzie jest napisane
I odwrotnie, w kodzie funkcyjnym wartość wyjściowa funkcji zależy tylko od argumentów wprowadzanych do funkcji, więc
f
dwukrotne wywołanie funkcji z tą samą wartością argumentux
da za każdym razem ten sam wynikf(x)
.
Czy to nie jest dokładnie ten sam przypadek w przypadku programowania proceduralnego?
Czego należy szukać w wyróżniających się procedurach i funkcjach?