
Michael Cain
0
3949
414
Jeśli poświęcisz trochę czasu na czytanie trendów programistycznych w Internecie, usłyszysz o programowaniu funkcjonalnym. Termin ten jest rzucany dość często, ale co to znaczy?
Nawet jeśli wiesz, czym jest programowanie funkcjonalne, możesz nie wiedzieć, które języki najlepiej do niego pasują. W końcu nie wszystkie języki programowania są sobie równe. Chociaż możesz zastosować funkcjonalne paradygmaty programowania w wielu językach, wciąż istnieją takie, w których poczujesz się znacznie bardziej komfortowo.
Co to jest programowanie funkcjonalne?
Jeśli masz doświadczenie w matematyce, masz przewagę w programowaniu funkcjonalnym. Wynika to z faktu, że paradygmat programowania funkcjonalnego traktuje obliczenia jak funkcje matematyczne. Jeśli nie masz matematycznego zaplecza, możesz poczuć się zagubiony.
Zasadniczo programowanie funkcjonalne traktuje funkcje i dane jako niezmienne. Przekazujesz dane do funkcji, która generalnie zwraca te dane przetworzone lub jakiś inny rodzaj danych. W programowaniu funkcjonalnym funkcja nigdy nie powinna zmieniać oryginalnych danych lub stanu programu.
Istnieje podobieństwo do filozofii Uniksa, że każdy program powinien zrobić jedną rzecz dobrze. Funkcja nie powinna dotykać różnych części twojego programu. Zamiast tego powinien wziąć swój wkład i dać ci wynik.
W idealnym przypadku funkcje powinny być czyste, gdy tylko jest to możliwe w programowaniu funkcjonalnym. Oznacza to, że przy tym samym wejściu, wyjście funkcji zawsze pozostanie takie samo.
Programowanie funkcjonalne a obiektowe
Jest to dramatyczne odejście od czegoś takiego jak programowanie obiektowe. W programowaniu obiektowym często masz obiekt podstawowy z różnymi metodami służącymi do zmiany danych lub stanu, które są częścią tego obiektu. Metoda może nawet zmienić dane lub stan, jeśli nie zostanie to wyraźnie określone.
W praktycznych programach czasami ma to sens. To powiedziawszy, może utrudniać utrzymanie programów, ponieważ nie zawsze jest jasne, co zmienia stan lub dane. Programowanie funkcjonalne było pierwotnie używane w środowiskach akademickich, ale może również pomóc w zapobieganiu tego rodzaju problemom.
1. JavaScript
Niektóre języki programowania umożliwiają programowanie funkcjonalne, podczas gdy inne albo go wspierają, albo nawet egzekwują. JavaScript należy do pierwszej kategorii. Chociaż można używać funkcjonalnych paradygmatów programowania w języku, równie łatwo można zastosować podejście obiektowe.
To powiedziawszy, istnieje wiele funkcjonalnych paradygmatów programowania wbudowanych w JavaScript. Weźmy na przykład funkcje wyższego rzędu. Są to funkcje, które mogą przyjmować inne funkcje jako argumenty.
JavaScript ma kilka funkcji, które działają z tablicami takimi jak mapa()
, zmniejszyć()
, filtr()
, i inne, z których wszystkie są funkcjami wyższego rzędu. Pozwala to połączyć je ze sobą, aby szybko wykonywać różne czynności za pomocą tablicy.
Podczas gdy wczesny JavaScript miał pewne problemy ze zmiennością, nowsze wersje standardu ECMAScript zawierają poprawki. Zamiast wszystkiego var
słowo kluczowe do definiowania zmiennych, masz już const
i pozwolić
. Pierwszy pozwala zdefiniować stałe, jak sama nazwa wskazuje. Drugi, pozwolić
, ogranicza zakres zmiennej do funkcji, w której jest zadeklarowana.
2. Python
Podobnie jak JavaScript, Python jest uogólnionym językiem, w którym można używać dowolnej liczby paradygmatów programowania. Python może mieć swoje wady 4 Powody, dla których Python nie jest dla Ciebie językiem programowania 4 Powody, dla których Python nie jest dla Ciebie językiem programowania Język programowania w Pythonie jest niezwykle popularny, ale oto kilka powodów, dla których możesz chcieć uniknąć Pythona . , ale programowanie funkcjonalne nie jest jednym z nich. Istnieje nawet wstęp do programowania funkcjonalnego w oficjalnej dokumentacji Pythona.
Na początek znajdziesz wiele takich samych mapa()
, filtr()
, zmniejszyć()
, i podobne funkcje wspomniane powyżej wbudowane. Podobnie jak w przypadku JavaScript, są to funkcje wyższego rzędu, ponieważ przyjmują inne funkcje jako argumenty. W języku Python programowanie funkcjonalne ma tę zaletę, że ma postać lambda
słowo kluczowe.
Możesz używać wyrażeń lambda na kilka sposobów. Jednym ze sposobów użycia tego jest skrócenie prostych funkcji. Po przypisaniu do zmiennej możesz wywoływać wyrażenia lambda dokładnie tak, jak zwykłą funkcję Pythona. Prawdziwą zaletą wyrażeń lambda jest użycie ich jako funkcji anonimowych.
Funkcje anonimowe działają również w JavaScript i innych językach na tej liście. Są one szczególnie przydatne, gdy są używane z funkcjami wyższego rzędu, ponieważ można je zdefiniować na miejscu. Bez funkcji anonimowych konieczne byłoby wstępne zdefiniowanie nawet prostych dodatków jako funkcji na zamówienie.
3. Clojure
W przeciwieństwie do JavaScript i Pythona, Clojure może nie być powszechnie znaną nazwą, nawet wśród programistów. Jeśli nie jesteś zaznajomiony, Clojure to dialekt języka programowania Lisp, którego historia sięga końca lat 50. XX wieku. Daje to bardzo specyficzny sposób robienia rzeczy, które są idealne do programowania funkcjonalnego.
Podobnie jak inne dialekty Lisp, Clojure traktuje kod jako dane. Oznacza to, że kod może się skutecznie zmieniać. W przeciwieństwie do innych dialektów Lisp, Clojure działa na platformie Java i jest kompilowany do kodu bajtowego JVM. Oznacza to, że może współpracować z bibliotekami Java, niezależnie od tego, czy zostały napisane w Clojure, czy nie.
W przeciwieństwie do poprzednich języków z tej listy, Clojure jest funkcjonalnym językiem programowania od podstaw. Oznacza to, że opowiada się za niezmiennością tam, gdzie to możliwe, szczególnie w strukturach danych.
Clojure nie oczekuje, że wszystkie programy będą matematyczne “dający się udowodnić,” ale zachęca do korzystania z czystych funkcji tam, gdzie to możliwe.
4. Elm
Jeden z nowszych języków na tej liście, Elm jest językiem czysto funkcjonalnym, pierwotnie zaprojektowanym przez Evana Czaplickiego w 2012 roku. Język zyskał popularność wśród twórców stron internetowych, szczególnie do tworzenia interfejsów użytkownika.
W przeciwieństwie do wszystkich poprzednich pozycji na tej liście, Elm używa statycznego sprawdzania typu. Pomaga to uniknąć wyjątków środowiska wykonawczego, a błędy są wychwytywane podczas kompilacji. Oznacza to mniej widoczne błędy dla użytkowników, co jest dużym plusem.
Kompilator Elm jest ukierunkowany na HTML, CSS i JavaScript. W ten sam sposób, w jaki możesz używać Clojure do pisania programów działających w Javie, możesz pisać aplikacje korzystające z bibliotek JavaScript w Elm.
Jedną z głównych różnic między Wiązem a innymi językami jest to, że nie znajdziesz ogólnego filtr()
, mapa()
, i podobne funkcje. Zamiast tego są one zdefiniowane według typu danych jak List.map
lub Dict.map
.
5. Haskell
Haskell jest kolejnym statycznym, czysto funkcjonalnym językiem. W przeciwieństwie do Elm, Haskell istnieje od jakiegoś czasu. Pierwsza wersja języka została zaprojektowana w 1990 roku. Najnowszym standardem jest Haskell 2010, a kolejna wersja planowana jest na 2020 rok.
Jak już zbadaliśmy, czysto funkcjonalny charakter Haskell oznacza, że z założenia funkcje nie powinny mieć skutków ubocznych. To sprawia, że dobrze nadaje się do rozwiązywania rzeczywistych problemów, mimo że funkcjonalne programowanie ma swoje korzenie w środowisku akademickim.
Pomimo braku popularności głównego nurtu, Haskell był zatrudniony w niektórych szeroko stosowanych projektach. Menedżer okien Xmonad jest napisany całkowicie w języku Haskell. Pandoc, który konwertuje różne typy znaczników do iz innych formatów, również używa tego języka.
Standard mapa()
, filtr()
, zmniejszyć()
, oraz inne funkcje wyższego rzędu, które powinny umożliwić przeniesienie pojęć z JavaScript lub Pythona do Haskell. Jeśli chcesz dowiedzieć się więcej na temat języka, popularnym punktem wyjścia jest nauka wspaniałego dobra Haskell.
Czy dopiero zaczynasz programować??
Niektóre z powyższych terminów i języków mogą wydawać się nieco ezoteryczne, jeśli nie jesteś jeszcze doświadczonym programistą. To dobrze, ponieważ wiedza o tym, czego nie wiesz, jest jednym z pierwszych kroków do zostania lepszym uczniem.
Niektóre z wyżej wymienionych języków są lepsze dla początkujących niż inne. Spójrz na naszą listę najlepszych języków programowania dla początkujących. 6 najłatwiejszych języków programowania dla początkujących. 6 najłatwiejszych języków programowania dla początkujących. Nauka programowania polega na znalezieniu odpowiedniego języka, tak samo jak na procesie edycji. Oto sześć najpopularniejszych języków programowania dla początkujących. . Zauważysz, że między dwiema listami jest jakiś skrzyżowanie.