Introduction to functional programming. Learn more about background of this approach, see pros and cons or just try to be nice ;) Some demos from RxJS and F# included.
11. Obiektowo jest wporzo?
Klasy odwzorowują obiekty biznesowe
(a o wszystkim decyduje ich aktualny stan)
Działanie metod jest przewidywalne
(ale nie ma problemu żeby wykonać coś „na boku”)
OOP wspiera dobre praktyki
(ale nie zabrania złych)
13. No coś słyszałem, ale…
…w sumie po co, skoro C# / Ruby / Java mi wystarczy?
…w sumie po co, skoro od zawsze robiłem w jQuery i działało?
…w sumie po co, skoro nie znam a i tak mi płacą?
…w sumie po co, skoro…
15. „To, że ciągle robisz coś w określony sposób
wcale nie oznacza, że jest to najlepszy sposób
na robienie tego czegoś.”
Problem nr 2 – przyzwyczajenia
16. „JS jest złym językiem, bo nie ma klas.”
Problem nr 3 – OOP jako lek na wszystko
25. Brak efektów ubocznych
(no side-effects)
Brak mutacji parametru
(immutability)
Funkcja jest bezstanowa
(stateless)
public int MultiplyAndAddOne(int input)
{
switch(input)
{
case 1: return 3;
case 2: return 5;
case 3: return 7;
…
}
}
26. => Przewidywalne zachowanie
=> Łatwe testowanie
=> Zmiana nawyków
public int MultiplyAndAddOne(int input)
{
switch(input)
{
case 1: return 3;
case 2: return 5;
case 3: return 7;
…
}
}
37. F#
• Microsoft, 2005
• Pozwala na tworzenie kodu w wielu paradygmatach
• Mocno typowany
• Oparty o platformę .NET
• Visual Studio
• Pipes, pattern matching, async
50. Pułapki
Wdrożenie „czystego” FP w zespole może okazać się zbyt kosztowne
O wiele mniejsza baza zasobów w porównaniu do OOP
Problematyczna optymalizacja
51. Dobre praktyki OOP / FP
SRP / Minimalizowanie efektów ubocznych (no side-effects)
Przewidywalne zachowanie funkcji (immutability)
Minimalizowanie globalnego stanu (stateless)
52. „To, że ciągle robisz coś w określony sposób
wcale nie oznacza, że jest to najlepszy sposób
na robienie tego czegoś.”
Przemek Smyrdek, EUVIC
Lekki wstęp do programowania funkcyjnego i reaktywnego, trochę o F#, Rx.JS oraz o dobrych i złych wzorcach w programowaniu.
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Przewidywalność
Łatwe testowanie
Przewidywalność
Łatwe testowanie
Ci którzy nie podnieśli rąk być może myślą w ten sposób – no coś słyszałem, ale…
I w sumie nigdy nie było czasu albo chęci na poznanie tematu szerzej.
TOP 39 szkół w USA na 2014 – Pierwszy język programowania jakiego uczą
Scratch – darmowy interaktywny język do nauki programowania poprzez wizualizację
Jedynie funkcyjny Scheme (skim) – 5 na 39 szkół
Przykład rozwoju aplikacji JS’owych
jQuery -> MVVM (Knockout) -> MVC (Angular) -> Functional (React)
Zamiast zrozumieć powody dla których dany język lub sposób programowania wygląda tak a nie inaczej, najprostszym wyjściem jest zanegować sens jego istnienia.
Nie obiecuję że od dzisiaj wszyscy zaczniecie programować w ten sposób. Ja sam programuję głównie w C#, bardzo mocno trzymam się programowania obiektowego ale uważam, że warto poszerzać swoje horyzonty
Zanim krótki wstęp i więcej konkretów to chciałbym żebyśmy zostali na trochę w tej „niewiedzy” i popatrzyli z czego ona wynika – 3 główne problemy
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Podsumowując to co wiemy do tej pory możemy już wprowadzić podział
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Programowanie reaktywne – reactive functional programming
R
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu