SlideShare a Scribd company logo
1 of 58
Download to read offline
PARADYGMATY
PROGRAMOWANIA
CZY ISTNIEJE NAJLEPSZY?
@akashivskyy
PARADYGMATY
PROGRAMOWANIA
SPOSÓB PATRZENIA NA
PRZEPŁYW STEROWANIA I
WYKONYWANIE PROGRAMU
1. PROGRAMOWANIE
OBIEKTOWE
PROGRAM DEFINIUJĄ OBIEKTY
ŁĄCZĄCE STAN I ZACHOWANIE
3 ZAŁOŻENIA
1. ABSTRAKCJA
2. ENKAPSULACJA
3. DZIEDZICZNOŚĆ
1. ABSTRAKCJA
2. ENKAPSULACJA
3. DZIEDZICZNOŚĆ
protoco! Shape {
var area: Doub!e
}
func pr"ntShapeArea(shape: Shape) {
pr"nt!n("area = (shape.area)")
}
struct Square: Shape {
!et s"de: Doub!e
!et area: Doub!e {
return s"de # s"de
}
}
pr"ntShapeArea(Square(s"de: 4)) // 16.$
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
struct P!ane: Shape {
var area: Doub!e {
return Doub!e."nf"n"ty
}
}
pr"ntShapeArea(P!ane()) // "nf"n"ty
1. ABSTRAKCJA
2. ENKAPSULACJA
3. DZIEDZICZNOŚĆ
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)
}
}
!et ass"stant = Encrypt"onAss"stant()
ass"stant.encrypt("secret") // 1L!$$Myn4RtY
ass"stant.key // comp"!e error!
1. ABSTRAKCJA
2. ENKAPSULACJA
3. DZIEDZICZNOŚĆ
POJAZD
SZYNOWY DROGOWY
TRAMWAJ POCIĄG ROWER KOMBAJN
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"
}
Car().name // red car
B!ueCar().name // b!ue car
2. PROGRAMOWANIE
IMPERATYWNE
ZDANIA ROZKAZUJĄCE,
ZMIENIAJĄCE GLOBALNY STAN
PROGRAMU
!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)
}
}
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)
}
})
PROGRAMOWANIE
IMPERATYWNE JEST
NAJPOPULARNIEJSZE
PROGRAMOWANIE
IMPERATYWNE JEST
NAJŁATWIEJSZE
PROGRAMOWANIE
IMPERATYWNE JEST
NAJGORSZE
1. PODATNE NA BŁĘDY
2. NIE SKALUJE SIĘ
3. ZBYT SKOMPLIKOWANE
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)
}
})
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)
}
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 {
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)
}
})
3. PROGRAMOWANIE
DEKLARATYWNE
DEKLARUJEMY CO CHCEMY
OSIĄGNĄĆ, A NIE JAK TO
ZROBIĆ
!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)
}
}
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)
}
}
!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
})
!et numbers = [1, 2, 3, 4, 5, 6]
!et sum = reduce(numbers, $, +)
!et odds = f"!ter(numbers, { $$ % 2 == 1 })
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)
}
})
RURY
POBIERZ PRZETWÓRZ ZAPISZ WYŚWIETL
BŁĘDY
POBIERZ PRZETWÓRZ ZAPISZ WYŚWIETL
BŁĘDY
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) })
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) })
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) })
PROGRAMOWANIE
DEKLARATYWNE JEST
PROSTSZE
PROGRAMOWANIE
DEKLARATYWNE JEST
BEZPIECZNIEJSZE
PROGRAMOWANIE
DEKLARATYWNE JEST
BARDZIEJ SKALOWALNE
CZY ISTNIEJE
NAJLEPSZY PARADYGMAT?
1. OBIEKTOWY
2. IMPERATYWNY
3. DEKLARATYWNY
1. OBIEKTOWY
2. IMPERATYWNY
3. DEKLARATYWNY
1. OBIEKTOWY
2. IMPERATYWNY
3. DEKLARATYWNY
RAZEM
DZIĘKUJĘ
ADRIAN KASHIVSKYY
@akashivskyy
github.com/akashivskyy/talks

More Related Content

What's hot (18)

SSC Certificate
SSC CertificateSSC Certificate
SSC Certificate
 
Corridoor 2
Corridoor 2Corridoor 2
Corridoor 2
 
H.S.C Certificate
H.S.C CertificateH.S.C Certificate
H.S.C Certificate
 
Heath and safety 5
Heath and safety 5Heath and safety 5
Heath and safety 5
 
Cert ofAbhishek Banerjee
Cert ofAbhishek Banerjee Cert ofAbhishek Banerjee
Cert ofAbhishek Banerjee
 
EDUCACION
EDUCACIONEDUCACION
EDUCACION
 
Solucion 14 t
Solucion 14 tSolucion 14 t
Solucion 14 t
 
IJAZAH
IJAZAHIJAZAH
IJAZAH
 
certificate 2015.PDF
certificate 2015.PDFcertificate 2015.PDF
certificate 2015.PDF
 
LNG.2
LNG.2LNG.2
LNG.2
 
Plan del trabajo del departamento psicopedagógico
Plan del trabajo del departamento psicopedagógicoPlan del trabajo del departamento psicopedagógico
Plan del trabajo del departamento psicopedagógico
 
JSS.PDF
JSS.PDFJSS.PDF
JSS.PDF
 
2011_TU_SOFIQ_MAGISTAR_ELMS_DIPLOMA
2011_TU_SOFIQ_MAGISTAR_ELMS_DIPLOMA2011_TU_SOFIQ_MAGISTAR_ELMS_DIPLOMA
2011_TU_SOFIQ_MAGISTAR_ELMS_DIPLOMA
 
PAPER CLIPPING.PDF
PAPER CLIPPING.PDFPAPER CLIPPING.PDF
PAPER CLIPPING.PDF
 
EXAMEN MECANICA DE SUELOS - 3RA UNIDAD - UNT
EXAMEN MECANICA DE SUELOS - 3RA UNIDAD - UNTEXAMEN MECANICA DE SUELOS - 3RA UNIDAD - UNT
EXAMEN MECANICA DE SUELOS - 3RA UNIDAD - UNT
 
Examen parcial mecanica de suelos 2 UNI-FIC resuelto
Examen parcial mecanica de suelos 2 UNI-FIC resueltoExamen parcial mecanica de suelos 2 UNI-FIC resuelto
Examen parcial mecanica de suelos 2 UNI-FIC resuelto
 
1999_2004_TU_BAKALAVAR_EL_ENG_DIPLOMA
1999_2004_TU_BAKALAVAR_EL_ENG_DIPLOMA1999_2004_TU_BAKALAVAR_EL_ENG_DIPLOMA
1999_2004_TU_BAKALAVAR_EL_ENG_DIPLOMA
 
Juan
JuanJuan
Juan
 

Viewers also liked

Hidden Gems in Swift
Hidden Gems in SwiftHidden Gems in Swift
Hidden Gems in SwiftNetguru
 
Payments integration: Stripe & Taxamo
Payments integration: Stripe & TaxamoPayments integration: Stripe & Taxamo
Payments integration: Stripe & TaxamoNetguru
 
Why no one is looking for rockstar programmers (updated version)
Why no one is looking for rockstar programmers (updated version)Why no one is looking for rockstar programmers (updated version)
Why no one is looking for rockstar programmers (updated version)Wiktor Schmidt
 
Everyday Rails
Everyday RailsEveryday Rails
Everyday RailsNetguru
 
Why Would A Programmer Fall In Love With SPA?
Why Would A Programmer Fall In Love With SPA?Why Would A Programmer Fall In Love With SPA?
Why Would A Programmer Fall In Love With SPA?Netguru
 
CSS architecture: How To Write Clean & Scalable Code
CSS architecture: How To Write Clean & Scalable CodeCSS architecture: How To Write Clean & Scalable Code
CSS architecture: How To Write Clean & Scalable CodeNetguru
 
Agile Retrospectives
Agile RetrospectivesAgile Retrospectives
Agile RetrospectivesNetguru
 
Czy Project Manger Musi Być Osobą Techniczną?
Czy Project Manger Musi Być Osobą Techniczną?Czy Project Manger Musi Być Osobą Techniczną?
Czy Project Manger Musi Być Osobą Techniczną?Netguru
 
Z 50 do 100 w ciągu roku Jak rekrutować w IT?
Z 50 do 100 w ciągu roku Jak rekrutować w IT?Z 50 do 100 w ciągu roku Jak rekrutować w IT?
Z 50 do 100 w ciągu roku Jak rekrutować w IT?Netguru
 
KISS Augmented Reality
KISS Augmented RealityKISS Augmented Reality
KISS Augmented RealityNetguru
 
Defining DSL (Domain Specific Language) using Ruby
Defining DSL (Domain Specific Language) using RubyDefining DSL (Domain Specific Language) using Ruby
Defining DSL (Domain Specific Language) using RubyNetguru
 
Communication With Clients Throughout The Project
Communication With Clients Throughout The ProjectCommunication With Clients Throughout The Project
Communication With Clients Throughout The ProjectNetguru
 
Rozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, Netguru
Rozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, NetguruRozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, Netguru
Rozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, NetguruBiznes 2.0
 
From Birds To Bugs: Testowanie Z Pasją
From Birds To Bugs: Testowanie Z PasjąFrom Birds To Bugs: Testowanie Z Pasją
From Birds To Bugs: Testowanie Z PasjąNetguru
 
Blogi w firmie
Blogi w firmieBlogi w firmie
Blogi w firmieNetguru
 
Ruby Rails Overview
Ruby Rails OverviewRuby Rails Overview
Ruby Rails OverviewNetguru
 
How To Build Great Relationships With Your Clients
How To Build Great Relationships With Your ClientsHow To Build Great Relationships With Your Clients
How To Build Great Relationships With Your ClientsNetguru
 

Viewers also liked (17)

Hidden Gems in Swift
Hidden Gems in SwiftHidden Gems in Swift
Hidden Gems in Swift
 
Payments integration: Stripe & Taxamo
Payments integration: Stripe & TaxamoPayments integration: Stripe & Taxamo
Payments integration: Stripe & Taxamo
 
Why no one is looking for rockstar programmers (updated version)
Why no one is looking for rockstar programmers (updated version)Why no one is looking for rockstar programmers (updated version)
Why no one is looking for rockstar programmers (updated version)
 
Everyday Rails
Everyday RailsEveryday Rails
Everyday Rails
 
Why Would A Programmer Fall In Love With SPA?
Why Would A Programmer Fall In Love With SPA?Why Would A Programmer Fall In Love With SPA?
Why Would A Programmer Fall In Love With SPA?
 
CSS architecture: How To Write Clean & Scalable Code
CSS architecture: How To Write Clean & Scalable CodeCSS architecture: How To Write Clean & Scalable Code
CSS architecture: How To Write Clean & Scalable Code
 
Agile Retrospectives
Agile RetrospectivesAgile Retrospectives
Agile Retrospectives
 
Czy Project Manger Musi Być Osobą Techniczną?
Czy Project Manger Musi Być Osobą Techniczną?Czy Project Manger Musi Być Osobą Techniczną?
Czy Project Manger Musi Być Osobą Techniczną?
 
Z 50 do 100 w ciągu roku Jak rekrutować w IT?
Z 50 do 100 w ciągu roku Jak rekrutować w IT?Z 50 do 100 w ciągu roku Jak rekrutować w IT?
Z 50 do 100 w ciągu roku Jak rekrutować w IT?
 
KISS Augmented Reality
KISS Augmented RealityKISS Augmented Reality
KISS Augmented Reality
 
Defining DSL (Domain Specific Language) using Ruby
Defining DSL (Domain Specific Language) using RubyDefining DSL (Domain Specific Language) using Ruby
Defining DSL (Domain Specific Language) using Ruby
 
Communication With Clients Throughout The Project
Communication With Clients Throughout The ProjectCommunication With Clients Throughout The Project
Communication With Clients Throughout The Project
 
Rozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, Netguru
Rozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, NetguruRozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, Netguru
Rozwijanie firmy web developerskiej - Kuba Filipowski, Wiktor Schmidt, Netguru
 
From Birds To Bugs: Testowanie Z Pasją
From Birds To Bugs: Testowanie Z PasjąFrom Birds To Bugs: Testowanie Z Pasją
From Birds To Bugs: Testowanie Z Pasją
 
Blogi w firmie
Blogi w firmieBlogi w firmie
Blogi w firmie
 
Ruby Rails Overview
Ruby Rails OverviewRuby Rails Overview
Ruby Rails Overview
 
How To Build Great Relationships With Your Clients
How To Build Great Relationships With Your ClientsHow To Build Great Relationships With Your Clients
How To Build Great Relationships With Your Clients
 

More from Netguru

Estimation myths debunked
Estimation myths debunkedEstimation myths debunked
Estimation myths debunkedNetguru
 
Programming Paradigms Which One Is The Best?
Programming Paradigms Which One Is The Best?Programming Paradigms Which One Is The Best?
Programming Paradigms Which One Is The Best?Netguru
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails IntroNetguru
 
Perfect Project Read Me (in a few steps)
Perfect Project Read Me (in a few steps)Perfect Project Read Me (in a few steps)
Perfect Project Read Me (in a few steps)Netguru
 
The Git Basics
The Git BasicsThe Git Basics
The Git BasicsNetguru
 
From nil to guru: intro to Ruby on Rails
From nil to guru: intro to Ruby on RailsFrom nil to guru: intro to Ruby on Rails
From nil to guru: intro to Ruby on RailsNetguru
 
Working With Teams Across The Borders
Working With Teams Across The BordersWorking With Teams Across The Borders
Working With Teams Across The BordersNetguru
 
Front-End Dev Tools
Front-End Dev ToolsFront-End Dev Tools
Front-End Dev ToolsNetguru
 
OOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsOOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsNetguru
 
Coffeescript presentation DublinJS
Coffeescript presentation DublinJSCoffeescript presentation DublinJS
Coffeescript presentation DublinJSNetguru
 
Developing a webdevelopment company
Developing a webdevelopment companyDeveloping a webdevelopment company
Developing a webdevelopment companyNetguru
 
Barcamps in Europe
Barcamps in EuropeBarcamps in Europe
Barcamps in EuropeNetguru
 
Wiktor Schmidt, RuPy 2008, Caching in Rails
Wiktor Schmidt, RuPy 2008, Caching in RailsWiktor Schmidt, RuPy 2008, Caching in Rails
Wiktor Schmidt, RuPy 2008, Caching in RailsNetguru
 
Barcamp #5 - API
Barcamp #5 - APIBarcamp #5 - API
Barcamp #5 - APINetguru
 
Barcamp #5 - Mikrocelebryci
Barcamp #5 - MikrocelebryciBarcamp #5 - Mikrocelebryci
Barcamp #5 - MikrocelebryciNetguru
 

More from Netguru (15)

Estimation myths debunked
Estimation myths debunkedEstimation myths debunked
Estimation myths debunked
 
Programming Paradigms Which One Is The Best?
Programming Paradigms Which One Is The Best?Programming Paradigms Which One Is The Best?
Programming Paradigms Which One Is The Best?
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 
Perfect Project Read Me (in a few steps)
Perfect Project Read Me (in a few steps)Perfect Project Read Me (in a few steps)
Perfect Project Read Me (in a few steps)
 
The Git Basics
The Git BasicsThe Git Basics
The Git Basics
 
From nil to guru: intro to Ruby on Rails
From nil to guru: intro to Ruby on RailsFrom nil to guru: intro to Ruby on Rails
From nil to guru: intro to Ruby on Rails
 
Working With Teams Across The Borders
Working With Teams Across The BordersWorking With Teams Across The Borders
Working With Teams Across The Borders
 
Front-End Dev Tools
Front-End Dev ToolsFront-End Dev Tools
Front-End Dev Tools
 
OOScss Architecture For Rails Apps
OOScss Architecture For Rails AppsOOScss Architecture For Rails Apps
OOScss Architecture For Rails Apps
 
Coffeescript presentation DublinJS
Coffeescript presentation DublinJSCoffeescript presentation DublinJS
Coffeescript presentation DublinJS
 
Developing a webdevelopment company
Developing a webdevelopment companyDeveloping a webdevelopment company
Developing a webdevelopment company
 
Barcamps in Europe
Barcamps in EuropeBarcamps in Europe
Barcamps in Europe
 
Wiktor Schmidt, RuPy 2008, Caching in Rails
Wiktor Schmidt, RuPy 2008, Caching in RailsWiktor Schmidt, RuPy 2008, Caching in Rails
Wiktor Schmidt, RuPy 2008, Caching in Rails
 
Barcamp #5 - API
Barcamp #5 - APIBarcamp #5 - API
Barcamp #5 - API
 
Barcamp #5 - Mikrocelebryci
Barcamp #5 - MikrocelebryciBarcamp #5 - Mikrocelebryci
Barcamp #5 - Mikrocelebryci
 

Paradygmaty Programowania: Czy Istnieje Najlepszy?