Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[PL] Not-so-object-oriented programming

[PL] Not-so-object-oriented programming

Can we create solutions without OO approach? Of course! Let's take a look on functional programming world, all of this together with F# and RxJS.

Przemek

March 09, 2016
Tweet

More Decks by Przemek

Other Decks in Programming

Transcript

  1. 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)
  2. 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…
  3. „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
  4. 1 2 3 4 5 … 3 5 7 9

    11 … f(x) = 2x + 1
  5. 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; }
  6. 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; … } }
  7. 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; … } }
  8. => 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; … } }
  9. map

  10. F# • Microsoft, 2005 • Pozwala na tworzenie kodu w

    wielu paradygmatach • Mocno typowany • Oparty o platformę .NET • Visual Studio • Pipes, pattern matching, async
  11. Reactive Extensions • „Reactive Functional Programming” • Programowanie reaktywne –

    wykorzystanie wzorca Obserwator • Cross-platform (.NET, JS, Java, …) • Kompozycja oparta o strumienie danych • Async
  12. var onesStream = Rx.Observable .fromEvent(button, ’click’) .map( () => 1

    ); onesStream.subscribe(function(value) { … });
  13. 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
  14. Dobre praktyki OOP / FP SRP / Minimalizowanie efektów ubocznych

    (no side-effects) Przewidywalne zachowanie funkcji (immutability) Minimalizowanie globalnego stanu (stateless)
  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ś.”