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.

Paradygmaty Programowania: Czy Istnieje Najlepszy?

921 views

Published on

Published in: Technology
  • Be the first to comment

Paradygmaty Programowania: Czy Istnieje Najlepszy?

  1. 1. PARADYGMATY PROGRAMOWANIA CZY ISTNIEJE NAJLEPSZY? @akashivskyy
  2. 2. PARADYGMATY PROGRAMOWANIA
  3. 3. SPOSÓB PATRZENIA NA PRZEPŁYW STEROWANIA I WYKONYWANIE PROGRAMU
  4. 4. 1. PROGRAMOWANIE OBIEKTOWE
  5. 5. PROGRAM DEFINIUJĄ OBIEKTY ŁĄCZĄCE STAN I ZACHOWANIE
  6. 6. 3 ZAŁOŻENIA
  7. 7. 1. ABSTRAKCJA 2. ENKAPSULACJA 3. DZIEDZICZNOŚĆ
  8. 8. 1. ABSTRAKCJA 2. ENKAPSULACJA 3. DZIEDZICZNOŚĆ
  9. 9. protoco! Shape { var area: Doub!e } func pr"ntShapeArea(shape: Shape) { pr"nt!n("area = (shape.area)") }
  10. 10. struct Square: Shape { !et s"de: Doub!e !et area: Doub!e { return s"de # s"de } } pr"ntShapeArea(Square(s"de: 4)) // 16.$
  11. 11. struct C"rc!e: Shape { var rad"us: Doub!e var area: Doub!e { return M_PI # rad"us # rad"us } } pr"ntShapeArea(C"rc!e(rad"us: 2)) // 12.56
  12. 12. struct P!ane: Shape { var area: Doub!e { return Doub!e."nf"n"ty } } pr"ntShapeArea(P!ane()) // "nf"n"ty
  13. 13. 1. ABSTRAKCJA 2. ENKAPSULACJA 3. DZIEDZICZNOŚĆ
  14. 14. c!ass Encrypt"onAss"stant { pr"vate var key = "42$m!g$crub" pub!"c func encrypt(pass: Str"ng) -> Str"ng { return rsaEncrypt(pass, key) } }
  15. 15. !et ass"stant = Encrypt"onAss"stant() ass"stant.encrypt("secret") // 1L!$$Myn4RtY ass"stant.key // comp"!e error!
  16. 16. 1. ABSTRAKCJA 2. ENKAPSULACJA 3. DZIEDZICZNOŚĆ
  17. 17. POJAZD SZYNOWY DROGOWY TRAMWAJ POCIĄG ROWER KOMBAJN
  18. 18. c!ass Car { var co!or: Str"ng = "red" var name: Str"ng { return "(co!or) car" } } c!ass B!ueCar: Car { overr"de var co!or = "b!ue" }
  19. 19. Car().name // red car B!ueCar().name // b!ue car
  20. 20. 2. PROGRAMOWANIE IMPERATYWNE
  21. 21. ZDANIA ROZKAZUJĄCE, ZMIENIAJĄCE GLOBALNY STAN PROGRAMU
  22. 22. !et numbers = [1, 2, 3, 4, 5, 6] var sum = $ var odds: [Int] = [] for number "n numbers { sum += number "f number % 2 == 1 { odds.append(number) } }
  23. 23. getRemoteData("ur!", { data, error "n "f error == n"! { parseData(data, { parsed, error "n "f error == n"! { hand!eParsedData(parsed) } e!se { d"sp!ayError(error) } }) } e!se { d"sp!ayError(error) } })
  24. 24. PROGRAMOWANIE IMPERATYWNE JEST NAJPOPULARNIEJSZE
  25. 25. PROGRAMOWANIE IMPERATYWNE JEST NAJŁATWIEJSZE
  26. 26. PROGRAMOWANIE IMPERATYWNE JEST NAJGORSZE
  27. 27. 1. PODATNE NA BŁĘDY 2. NIE SKALUJE SIĘ 3. ZBYT SKOMPLIKOWANE
  28. 28. getRemoteData("examp!e.com", { data, error "n "f error == n"! { parseData(data, { parsed, error "n "f error == n"! { hand!eParsedData(parsed) } e!se { d"sp!ayError(error) } }) } e!se { d"sp!ayError(error) } })
  29. 29. getRemoteData("examp!e.com", { data, error "n "f error == n"! { parseData(data, { parsed, error "n "f error == n"! { "f parsedDataVa!"d(parsed) { hand!eParsedData(parsed) } } e!se { d"sp!ayError(error) } }) } e!se { d"sp!ayError(error) }
  30. 30. getRemoteData("examp!e.com", { data, error "n "f error == n"! { parseData(data, { parsed, error "n "f error == n"! { "f parsedDataVa!"d(parsed) { saveParsedDataInCache(parsed, { error "n "f error == n"! { hand!eParsedData(parsed) } e!se { d"sp!ayError(error) } }) } } e!se {
  31. 31. getRemoteData("examp!e.com", { data, error "n "f error == n"! { parseData(data, { parsed, error "n "f error == n"! { "f parsedDataVa!"d(parsed) { saveParsedDataInCache(parsed, { error "n "f error == n"! { hand!eParsedData(parsed, { error "n "f error == n"! { d"sp!aySuccess() } e!se { d"sp!ayError(error) } })
  32. 32. 3. PROGRAMOWANIE DEKLARATYWNE
  33. 33. DEKLARUJEMY CO CHCEMY OSIĄGNĄĆ, A NIE JAK TO ZROBIĆ
  34. 34. !et numbers = [1, 2, 3, 4, 5, 6] var sum = $ var odds: [Int] = [] for number "n numbers { sum += number "f number % 2 == 1 { odds.append(number) } }
  35. 35. var sum = $ var odds: [Int] = [] !et numbers = [1, 2, 3, 4, 5, 6] for number "n numbers { sum += number // redukcja "f number % 2 == 1 { // f"!tracja odds.append(number) } }
  36. 36. !et numbers = [1, 2, 3, 4, 5, 6] !et sum = reduce(numbers, $, { memo, number "n return memo + number }) !et odds = f"!ter(numbers, { number "n return number % 2 == 1 })
  37. 37. !et numbers = [1, 2, 3, 4, 5, 6] !et sum = reduce(numbers, $, +) !et odds = f"!ter(numbers, { $$ % 2 == 1 })
  38. 38. getRemoteData("examp!e.com" "ferror==n"!{ parseData(data,{parsed, "ferror==n"!{ "fparsedDataVa!"d(par saveParsedDataInCach "ferror==n"!{ hand!eParsedData "ferror==n"! d"sp!aySucces }e!se{ d"sp!ayError(e } }) }e!se{ d"sp!ayError(error } }) } }e!se{ d"sp!ayError(error) } }) }e!se{ d"sp!ayError(error) } })
  39. 39. RURY
  40. 40. POBIERZ PRZETWÓRZ ZAPISZ WYŚWIETL BŁĘDY
  41. 41. POBIERZ PRZETWÓRZ ZAPISZ WYŚWIETL BŁĘDY
  42. 42. getRemoteData("examp!e.com") .then({ data "n parseData(data) }) .f"!ter({ parsed "n parsedDataVa!"d(parsed) }) .then({ parsed "n saveInCache(parsed) }) .then({ parsed "n hand!eParsedData(parsed) }) .error({ error "n d"sp!ayError(error) })
  43. 43. getRemoteData("examp!e.com") .then({ data "n parseData(data) }) .f"!ter({ parsed "n parsedDataVa!"d(parsed) }) .f"!ter({ parsed "n !a!readyInCache(parsed) }) .then({ parsed "n saveInCache(parsed) }) .then({ parsed "n hand!eParsedData(parsed) }) .error({ error "n d"sp!ayError(error) })
  44. 44. getRemoteData("examp!e.com") .then({ data "n parseData(data) }) .f"!ter({ parsed "n parsedDataVa!"d(parsed) }) .f"!ter({ parsed "n !a!readyInCache(parsed) }) .then({ parsed "n saveInCache(parsed) }) .then({ parsed "n hand!eParsedData(parsed) }) .error({ error "n d"sp!ayError(error) })
  45. 45. PROGRAMOWANIE DEKLARATYWNE JEST PROSTSZE
  46. 46. PROGRAMOWANIE DEKLARATYWNE JEST BEZPIECZNIEJSZE
  47. 47. PROGRAMOWANIE DEKLARATYWNE JEST BARDZIEJ SKALOWALNE
  48. 48. CZY ISTNIEJE NAJLEPSZY PARADYGMAT?
  49. 49. 1. OBIEKTOWY 2. IMPERATYWNY 3. DEKLARATYWNY
  50. 50. 1. OBIEKTOWY 2. IMPERATYWNY 3. DEKLARATYWNY
  51. 51. 1. OBIEKTOWY 2. IMPERATYWNY 3. DEKLARATYWNY
  52. 52. RAZEM
  53. 53. DZIĘKUJĘ ADRIAN KASHIVSKYY @akashivskyy github.com/akashivskyy/talks

×