2009-05-06 8 views
12

W tej chwili robię javascript na co dzień. Pochodzę z tła OO, a większość kodu, z którym mam kontakt, jest w pewnym stopniu procesem proceduralnym/OO. Szukam dobrych przykładów, które rozwiązują mniej lub bardziej typowe zadania programowania sieci, ale w sposób funkcjonalny.Jaki jest dobry przykład programowania sieciowego w stylu funkcjonalnym za pomocą javascript?

Nie interesuje mnie żaden arbitralny przykład, który wygląda jak funkcjonalny. Szukam przykładu, który może pokazać, jak używać mocy funkcjonalnych do rozwiązywania problemów lepiej niż przy innym podejściu. Wiem, że to zależy od subiektywnego/stylistycznego stylu, ale nie rób tego zbyt mocno dla siebie (siebie).

Odpowiedz

17

Po pierwsze, chcesz zrozumieć, co oznacza programowanie funkcjonalne; to jest, jakie są podstawowe pojęcia i jak dobrze język pozwala ci trzymać się tych pojęć. W przypadku OOP podstawowe pojęcia obejmują enkapsulację, dziedziczenie i polimorfizm (lub po prostu komunikat przekazujący smalltalkers). W przypadku FP główną zasadą jest referential transparency (co implikuje bezpaństwowość). Próba programowania w stylu funkcjonalnym w języku, który nie obsługuje funkcji funkcjonalnych (na przykład funkcji jako obiektów pierwszej klasy) będzie niezręczna, jeśli nie będzie niemożliwa. To samo dotyczy programowania w OOP w językach, które nie mają funkcji OOP.

Na szczęście JavaScript jest paradygmatem wielu i obsługuje oba. Zamiast szukać przykładów kodu, który jest "funkcjonalny", pomyśl tylko o wszystkich sposobach, w jakie możesz zapewnić referencyjną przezroczystość, a to z kolei zapewni naturalnie doprowadzić do korzystania z funkcji FP języka, takich jak lambdy, zamknięcia, funkcje wyższego rzędu (np. mapa, redukcja, filtrowanie), curry itp.

Poważnie, to nie jest żadna odpowiedź. Naprawdę uważam, że jest to najbardziej motywujący i skuteczny sposób podejścia do niego.

To powiedziawszy, oto kilka miejmy nadzieję pomocne linki.

  1. FP programming in JavaScript

  2. Mostly adequate guide to FP

+0

Odpowiedź jest całkiem zrozumiała. Nie bardzo wiedziałem, kiedy piszę to pytanie. Moim założeniem było, że javascript będzie uważany za język funkcjonalny, ale teraz widzę, że tak naprawdę nie jest. A jeśli o tym pomyślę, to nie jest to nawet prawdziwy prototypowy język :) –

+0

Prawdopodobnie bardziej sprawiedliwe byłoby stwierdzenie, że JS nie jest językiem "niewoli i dyscypliny" (chociaż zwykle odnosi się to do dyscypliny typu). Z łatwością pozwala na prawie każdy styl programowania. "Funkcjonalne" i "OOP" to tylko style. Niektóre języki wymuszają na jednym stylu (Java i OOP), niektóre zdecydowanie zachęcają do jednego stylu, a jednocześnie pozwalają innym (C# z OOP i Functional), a niektóre naprawdę nie obchodzą, jak JavaScript. –

+0

Chciałbym dowiedzieć się więcej o funkcjonalnym użyciu JavaScript, to jest fantastyczna odpowiedź. Ponadto, aby dodać do tego, co zamieszczono poniżej w @kevin Hakanson, oto film [youtube z udziałem Douglasa Crockforda] (http://www.youtube.com/watch?v=v2ifWcnQs6M) – blong

1

Jednym z przykładów, że pamiętam to funkcja, która jest związana z obiektu do rejestracji jako obsługi zdarzeń

function bind(aHandler, aBind) { 
    var handler = aHandler; 
    var bind = aBind; 
    return function(event) { 
     return handler.call(bind, event); 
    } 
} 

Jest czynienia z zakresy (currying) i jest poręczny.

+0

Jak można nazwać to powiązania funkcji()? –

+0

Powiedzmy, że masz obiekt myObject, który ma funkcję someFunction. Następnie wywołujemy element element.addEventHandler ("eventtype", bind (someFunction, myObject)). Tak więc w momencie zdarzenia funkcja na twoim obiekcie nazywa się –

0

Spójrz na jQuery. Ten blog dobrze pokazuje, że jest w funkcjonalnym stylu. http://importantshock.wordpress.com/2009/01/18/jquery-is-a-monad/

Powiedział, że JS nie jest to język funkcjonalny (IMO), więc próbuje zmusić go do być jeden nie jest prawdopodobnie najbardziej skuteczny ścieżka jako deweloper (przy użyciu śrubokręta jak młotem - nadal dostaje gwóźdź w ścianie, ale nie aż tak szybko :). Z drugiej strony jest to język lambda.

+0

Czy możesz to wyjaśnić? Jakie są twoje główne powody, dla których javascript nie jest językiem funkcjonalnym? Co jest inne/brakuje? –

+1

Powinienem być bardziej przejrzysty. To nie jest "czysto" funkcjonalny język. Z pewnością możesz użyć lambda i closures, aby pisać w tym stylu, ale myślę, że wynikowa składnia jest podobna do tego, co dzieje się, gdy próbujemy wymusić JavaScript, by robić klasyczne dziedziczenie. Wygląda to trochę napięte. Pełne ujawnienie: Nie koduję w stylu funkcjonalnym, więc dla was, którzy to robią, składnia jest prawdopodobnie całkowicie akceptowalna. – pluckyglen

5

Douglas Crockford łączy się z Functional JavaScript ze swojej strony zasobów JavaScript. Oto fragment ze strony:

Funkcjonalność to biblioteka do programowania funkcjonalnego w języku JavaScript. Definiuje ona standardowe funkcje wyższego rzędu, takie jak map, reduce (aka foldl) i select (aka filter). Definiuje także funkcje takie jak curry, rcurry i częściowe dla funkcji częściowej ; i komponuj, zabezpieczaj i , aż do programowania na poziomie funkcji. Wszystkie te funkcje akceptują ciągi znaków, takie jak "x -> x + 1", "x + 1" lub "+1" jako synonimy dla bardziej szczegółowej funkcji (x) {return x + 1}.

Powiązane problemy