Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
Media Evaluation..
Next
Download to read offline and view in fullscreen.

Share

Not-So-Object Oriented Programming

Download to read offline

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.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Not-So-Object Oriented Programming

  1. 1. Programowanie nie do końca obiektowe …czyli kilka sposobów na przeżycie bez klas. Przemek Smyrdek
  2. 2. Jak programujemy? Imperatywnie Deklaratywnie Proceduralnie LogicznieObiektowo Funkcyjnie
  3. 3. Obiektowo jest wporzo. Klasy odwzorowują obiekty biznesowe Działanie metod jest przewidywalne OOP wspiera dobre praktyki
  4. 4. To prawda, ale…
  5. 5. Ukryte wejścia / wyjścia Efekty uboczne
  6. 6. Stan algorytmu / klasy / etc.
  7. 7. Modyfikacja (mutacja) parametrów
  8. 8. 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)
  9. 9. Funkcyjnie? No coś słyszałem, ale…
  10. 10. 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…
  11. 11. Problem nr 1 – system edukacji
  12. 12. „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
  13. 13. „JS jest złym językiem, bo nie ma klas.” Problem nr 3 – OOP jako lek na wszystko
  14. 14. Warto poszerzać horyzonty
  15. 15. Co zdiagnozowaliśmy do tej pory? efekty uboczne globalny stan modyfikacja parametrów
  16. 16. A gdyby tak użyć funkcji matematycznych… y = f(x)
  17. 17. f(2) = 12 Przewidywalne zachowanie Mapowanie wejścia na wyjście Wysoki poziom abstrakcji
  18. 18. Dziedzina Abstrakcja
  19. 19. 1 2 3 4 5 … 3 5 7 9 11 … f(x) = 2x + 1
  20. 20. 1 2 3 4 5 … 3 5 7 9 11 … public int MultiplyAndAddOne(int input) { int multiplied = input * 2; int addOneResult = multiplied + 1; return addOneResult; }
  21. 21. 1 2 3 4 5 … 3 5 7 9 11 … public int MultiplyAndAddOne(int input) { switch(input) { case 1: return 3; case 2: return 5; case 3: return 7; … } }
  22. 22. 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; … } }
  23. 23. => 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; … } }
  24. 24. map filter reduce … Funkcyjnie, czyli co zrobić, a nie jak zrobić:
  25. 25. map
  26. 26. filter
  27. 27. reduce
  28. 28. Funkcja to obiekt pierwszej klasy
  29. 29. Przypisanie funkcji
  30. 30. Funkcja jako parametr
  31. 31. Funkcja zwracana z innej funkcji
  32. 32. Języki funkcyjne Czysto funkcyjne Mieszane
  33. 33. Programowanie funkcyjne x 2
  34. 34. F# • Microsoft, 2005 • Pozwala na tworzenie kodu w wielu paradygmatach • Mocno typowany • Oparty o platformę .NET • Visual Studio • Pipes, pattern matching, async
  35. 35. F# - DEMO
  36. 36. Reactive Extensions • „Reactive Functional Programming” • Programowanie reaktywne – wykorzystanie wzorca Obserwator • Cross-platform (.NET, JS, Java, …) • Kompozycja oparta o strumienie danych • Async
  37. 37. Rx.Observable
  38. 38. https://github.com/Reactive-Extensions/Rx.NET
  39. 39. https://medium.com/google-developer-experts/angular-introduction-to-reactive-extensions-rxjs-a86a7430a61f var observer = rx.Observer.create( function onNext(result){ console.log(result); }, function onError(err){ console.log(err); }, function onCompleted(){ console.log('Completed'); } ); observable.subscribe(observer);
  40. 40. Strumień eventów czas’click’ ’click’ ’click’’click’’click’’click’
  41. 41. Map, reduce, filter!
  42. 42. map ’click’ ’click’ ’click’’click’’click’’click’ 1 1 11 1 1 map
  43. 43. var onesStream = Rx.Observable .fromEvent(button, ’click’) .map( () => 1 ); onesStream.subscribe(function(value) { … });
  44. 44. Rx - DEMO
  45. 45. https://glebbahmutov.com/draw-cycle/
  46. 46. http://rxmarbles.com/
  47. 47. 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
  48. 48. Dobre praktyki OOP / FP SRP / Minimalizowanie efektów ubocznych (no side-effects) Przewidywalne zachowanie funkcji (immutability) Minimalizowanie globalnego stanu (stateless)
  49. 49. „To, że ciągle robisz coś w określony sposób wcale nie oznacza, że jest to najlepszy sposób na robienie tego czegoś.”
  50. 50. Credits: http://fsharpforfunandprofit.com/posts/thinking-functionally-intro/ https://www.youtube.com/watch?v=1zj7M1LnJV4 https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 http://wazniak.mimuw.edu.pl/index.php?title=Programowanie_funkcyjne http://blog.reactandbethankful.com/posts/2015/09/15/understanding-the-functional-revolution/ http://www.mpscholten.de/javascript/2016/01/15/javascript-in-2016-functional-programming-is-getting-here-to-stay.html http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html https://glebbahmutov.com/draw-cycle/ http://reactivex.io/intro.html http://fsharp.org/about/index.html http://www.scs.stanford.edu/16wi-cs240h/slides/fb-slides.html https://brianmckenna.org/blog/howtostopfp and more…
  51. 51. Dzięki :)

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.

Views

Total views

576

On Slideshare

0

From embeds

0

Number of embeds

9

Actions

Downloads

3

Shares

0

Comments

0

Likes

0

×