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.
Obiektowo jest wporzo?
Klasyodwzorowują 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)
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…
Brak efektów ubocznych
(noside-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;
…
}
}
F#
• Microsoft, 2005
•Pozwala na tworzenie kodu w wielu paradygmatach
• Mocno typowany
• Oparty o platformę .NET
• Visual Studio
• Pipes, pattern matching, async
Pułapki
Wdrożenie „czystego” FPw 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ąglerobisz coś w określony sposób
wcale nie oznacza, że jest to najlepszy sposób
na robienie tego czegoś.”
#13 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.
#15
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ół
#16 Przykład rozwoju aplikacji JS’owych
jQuery -> MVVM (Knockout) -> MVC (Angular) -> Functional (React)
#17 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.
#18 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
#33 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#34 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#35 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#36 Podsumowując to co wiemy do tej pory możemy już wprowadzić podział
#37 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#38 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#39 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#40 Programowanie reaktywne – reactive functional programming
R
#41 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#42 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#43 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#44 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#45 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#46 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#47 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu
#48 Imperatywnie – zbiór poleceń, linijka po linijce
Deklaratywnie – operowanie na logice wyższego poziomu