SlideShare a Scribd company logo
1 of 15
Download to read offline
FunkcionalnoFunkcionalno programiranjeprogramiranje
UvodUvod
-- Funkcionalno programiranje --
ETF Beograd 2017.
FunkcionalnoFunkcionalno programiranjeprogramiranje -- uvoduvod
• Razlike u odnosu na druge paradigme u programiranju
– nepromenljivi (nemutabilni) parametri funkcija
• funkcije služe za preslikavanje ulaznih podataka u izlazne
– funkcije su "građani prvog reda"
• postoje funkcijski literali, promenljive
• funkcije mogu biti prenete kao parametri drugih funkcija
• funkcije mogu da vrate funkcije kao svoje rezultate
• Scala
– objedinjuje koncepte OO, imperativ. i funkc. programiranja
– "skalira" sa potrebama programera
• može se koristiti za pisanje malih skripti
• može se koristiti za pisanje složenih softverskih sistema
-- Funkcionalno programiranje --
ETF Beograd 2017.
Genealoško stablo nekihGenealoško stablo nekih
programskih jezikaprogramskih jezika
http://www.slideshare.net/InfinITnetvaerk/a-history-of-nordic-compilers-and-autocodes
-- Funkcionalno programiranje --
ETF Beograd 2017.
Strukturiranost i namena jezikaStrukturiranost i namena jezika
http://erikengbrecht.blogspot.rs/2008/01/programming-language-continuum.html
-- Funkcionalno programiranje --
ETF Beograd 2017.
ParadigmeParadigme uu programiranjuprogramiranju
• Paradigma:
– ono šta služi kao obrazac ili model
– skup pretpostavki, koncepata, vrednosti – način razmišljanja
– ►obrazac koji služi kao pravac razmišljanja u programiranju
• Glavne paradigme• Glavne paradigme
– imperativno programiranje
– funkcionalno programiranje
– logičko programiranje
• Ortogonalno na glavne paradigme
– objektno-orijentisano programiranje
-- Funkcionalno programiranje --
ETF Beograd 2017.
Imperativno programiranjeImperativno programiranje
• Programira se upotrebom:
– promenljivih (varijabli)
– dodela
– kontrolnih struktura (uslovna grananja, ciklusi, ...)
• Dva načina konceptualizacije programa• Dva načina konceptualizacije programa
– sekvenca instrukcija (za von Neumann-ovu mašinu)
• programer navodi svaku instrukciju
– relacija između predikata
• uspostavljaju se logički uslovi nad podacima u vidu predikata, mat. formulacija
• Nedostaci:
– loša skalabilnost programa
– ograničenost principima koje je uveo von Neumann
-- Funkcionalno programiranje --
ETF Beograd 2017.
FunkcionalnoFunkcionalno programiranjeprogramiranje
• U užem smislu:
– programiranje bez promenljivih, dodela ili kontrolnih struktura
• U širem smislu:
– programiranje sa akcentom na upotrebi funkcija
• Funkcije postaju vrednosti koje se
– proizvode– proizvode
– konzumiraju
– sastavljaju
• Funkcionalan jezik pojednostavljuje ovakav pristup
– funkcije mogu biti definisane unutar drugih funkcija
– funkcije mogu biti parametri i rezultati drugih funkcija
– postoje osnovne operacije koje omogućavaju sastavljanje funkcija
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (1/4)Poređenje Java/Scala (1/4)
Java
Scala
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (2/4)Poređenje Java/Scala (2/4)
Person[] people;
Person[] minors;
Person[] adults;
...
{
ArrayList<Person> minorsList = new ArrayList<>();
ArrayList<Person> adultsList = new ArrayList<>();
for(int i = 0; i < people.length; i++)
(people[i].age < 18 ? minorsList : adultsList)
.add(people[i]);
Java
.add(people[i]);
minors = minorsList.toArray(people);
adults = adultsList.toArray(people);
}
Scala val people: Array[Person]
val (minors, adults) = people partition (_.age < 18)
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (3/4)Poređenje Java/Scala (3/4)
Person[] people;
Person[] minors;
Person[] adults;
...
{
ArrayList<Person> minorsList = new ArrayList<>();
ArrayList<Person> adultsList = new ArrayList<>();
for(int i = 0; i < people.length; i++)
(people[i].age < 18 ? minorsList : adultsList)
.add(people[i]);
Java
.add(people[i]);
minors = minorsList.toArray(people);
adults = adultsList.toArray(people);
}
// Kako paralelizovati?
Scala val people: Array[Person]
val (minors, adults) = people.par.par partition (_.age < 18)
-- Funkcionalno programiranje --
ETF Beograd 2017.
Poređenje Java/Scala (4/4)Poređenje Java/Scala (4/4)
• Novije verzije Jave su donele koncepte
iz funkcionalnog programiranja
– lambda funkcije
– tokove (stream) za podršku paralelnoj obradi
• To ukazuje na trendove povećanog interesa za FP• To ukazuje na trendove povećanog interesa za FP
• Međutim
– sam jezik Java je i dalje veoma eksplicitan
– nije koncipiran oko ideje funkcionalnog programiranja
– nije proširljiv tako da proširenja deluju kao deo osnovnog jezika
-- Funkcionalno programiranje --
ETF Beograd 2017.
ScalaScala
• Jezik razvijen u EPFL (Martin Odersky)
– Poseduje sve konstrukte funkcionalnih jezika
– Statičko tipiziranje
– Objektno-orijentisan jezik
– Funkcioniše na JVM, interoperabilnost sa Javom
– Adaptiran za simbolički račun– Adaptiran za simbolički račun
– Adaptiran za paralelno izvršavanje
• Kao i svaki netrivijalni jezik, poseduje:
– primitivne izraze – najjednostavnije entitete kojima se manipuliše
– sredstvo kombinovanja – za sastavljanje složenih elemenata
od jednostavnih
– sredstvo apstrakcije – za imenovanje elemenata
i njihovo upravljanje kao da su osnovni
-- Funkcionalno programiranje --
ETF Beograd 2017.
Prednosti FPPrednosti FP
• Manje pisanja koda
– jednostavnije za razumevanje (ali zahteva veliko predznanje)
– jednostavnije za održavanje, povećava produktivnost
• Nema bočnih efekata
– podaci "ulaze" u funkcije, ali ih funkcije ne menjaju
– jednostavnije za razumevanje– jednostavnije za razumevanje
– reupotrebljivost koda
• Rekurzija
– prirodna kontrolna struktura u funkcionalnim jezicima
– alternativa za cikluse u imperativnim jezicima
-- Funkcionalno programiranje --
ETF Beograd 2017.
Mane FPMane FP
• Ulaz i izlaz
– prirodna je protočna obrada, ne odgovara stilu FP
• Složeniji razvoj interaktivnih aplikacija
– zasnivaju se na ciklusima zahtev/odgovor
– inicira korisnik
• Programi koji se izvršavaju u ciklusu su složeniji za razvoj• Programi koji se izvršavaju u ciklusu su složeniji za razvoj
• Manja efikasnost na modernom hardveru
– FP je dominantno bio zastupljen u akademiji, gde performanse nisu bile
od velikog značaja
• Nije orijentisano ka podacima
– dohvatanje, manipulisanja i vraćanje podataka (baze podataka)
– OO pristup je prirodniji
-- Funkcionalno programiranje --
ETF Beograd 2017.
RadnoRadno okruokruženježenje
• REPL (Read-Eval-Print-Loop)
• IDE (ScalaIDE, Eclipse, NetBeans, IntelliJ)
• http://www.scala-lang.org
-- Funkcionalno programiranje --
ETF Beograd 2017.

More Related Content

What's hot

Вилијам Шекспир/William Shakespeare
Вилијам Шекспир/William ShakespeareВилијам Шекспир/William Shakespeare
Вилијам Шекспир/William ShakespeareAndjela Simsic
 
Uvod u elektroniku - Mikrokontroleri
Uvod u elektroniku - MikrokontroleriUvod u elektroniku - Mikrokontroleri
Uvod u elektroniku - MikrokontroleriDamjan Pavlica
 
Istorija razvoja racunara
Istorija razvoja racunaraIstorija razvoja racunara
Istorija razvoja racunaraSlavka Čičak
 
5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx
5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx
5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptxMilijan1
 
Poljičko-omiški kraj u prošlosti i danas
Poljičko-omiški kraj u prošlosti i danasPoljičko-omiški kraj u prošlosti i danas
Poljičko-omiški kraj u prošlosti i danasMiljenko Hajdarović
 
Nicholas Carr: Plitko (Što internet čini našem mozgu)
Nicholas Carr: Plitko (Što internet čini našem mozgu)Nicholas Carr: Plitko (Što internet čini našem mozgu)
Nicholas Carr: Plitko (Što internet čini našem mozgu)Pogled kroz prozor
 
Državna matura iz engleskoga jezika 2013./2014. A
Državna matura iz engleskoga jezika 2013./2014. ADržavna matura iz engleskoga jezika 2013./2014. A
Državna matura iz engleskoga jezika 2013./2014. Amojamatura
 
Kratka priča o mrežama - preklopnici i usmjerivači
Kratka priča o mrežama - preklopnici i usmjerivačiKratka priča o mrežama - preklopnici i usmjerivači
Kratka priča o mrežama - preklopnici i usmjerivačiHrvoje Horvat
 
Grafici trigonometrijskih funkcija_i_deo
Grafici trigonometrijskih funkcija_i_deoGrafici trigonometrijskih funkcija_i_deo
Grafici trigonometrijskih funkcija_i_deoJelena Dobrivojevic
 
Humanizam i renesansa
Humanizam i renesansaHumanizam i renesansa
Humanizam i renesansaVale Shau
 
Eлектрични потенцијал и напон
Eлектрични  потенцијал и напонEлектрични  потенцијал и напон
Eлектрични потенцијал и напонDragan Dimic
 
Zrinskofrankopanski otpor
Zrinskofrankopanski otporZrinskofrankopanski otpor
Zrinskofrankopanski otporbatica1
 
Rešavanje problema korišćenjem računara
Rešavanje problema korišćenjem računaraRešavanje problema korišćenjem računara
Rešavanje problema korišćenjem računarasuzanainformatika
 
odiseja homer.pptx
odiseja homer.pptxodiseja homer.pptx
odiseja homer.pptxIvanaDj1
 

What's hot (20)

Kralj Edip
Kralj EdipKralj Edip
Kralj Edip
 
Вилијам Шекспир/William Shakespeare
Вилијам Шекспир/William ShakespeareВилијам Шекспир/William Shakespeare
Вилијам Шекспир/William Shakespeare
 
Uvod u elektroniku - Mikrokontroleri
Uvod u elektroniku - MikrokontroleriUvod u elektroniku - Mikrokontroleri
Uvod u elektroniku - Mikrokontroleri
 
Istorija razvoja racunara
Istorija razvoja racunaraIstorija razvoja racunara
Istorija razvoja racunara
 
Uvod u programiranje
Uvod u programiranjeUvod u programiranje
Uvod u programiranje
 
5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx
5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx
5 GEOGRAFSKI SMJEŠTAJ HRVATSKE.pptx
 
Darbelis sniegena
Darbelis sniegenaDarbelis sniegena
Darbelis sniegena
 
Poljičko-omiški kraj u prošlosti i danas
Poljičko-omiški kraj u prošlosti i danasPoljičko-omiški kraj u prošlosti i danas
Poljičko-omiški kraj u prošlosti i danas
 
Nicholas Carr: Plitko (Što internet čini našem mozgu)
Nicholas Carr: Plitko (Što internet čini našem mozgu)Nicholas Carr: Plitko (Što internet čini našem mozgu)
Nicholas Carr: Plitko (Što internet čini našem mozgu)
 
Ivan Gundulić
Ivan GundulićIvan Gundulić
Ivan Gundulić
 
Državna matura iz engleskoga jezika 2013./2014. A
Državna matura iz engleskoga jezika 2013./2014. ADržavna matura iz engleskoga jezika 2013./2014. A
Državna matura iz engleskoga jezika 2013./2014. A
 
Kratka priča o mrežama - preklopnici i usmjerivači
Kratka priča o mrežama - preklopnici i usmjerivačiKratka priča o mrežama - preklopnici i usmjerivači
Kratka priča o mrežama - preklopnici i usmjerivači
 
Grafici trigonometrijskih funkcija_i_deo
Grafici trigonometrijskih funkcija_i_deoGrafici trigonometrijskih funkcija_i_deo
Grafici trigonometrijskih funkcija_i_deo
 
Humanizam i renesansa
Humanizam i renesansaHumanizam i renesansa
Humanizam i renesansa
 
кант и фихте 2
кант и фихте  2кант и фихте  2
кант и фихте 2
 
Eлектрични потенцијал и напон
Eлектрични  потенцијал и напонEлектрични  потенцијал и напон
Eлектрични потенцијал и напон
 
Abecedar 82
Abecedar 82Abecedar 82
Abecedar 82
 
Zrinskofrankopanski otpor
Zrinskofrankopanski otporZrinskofrankopanski otpor
Zrinskofrankopanski otpor
 
Rešavanje problema korišćenjem računara
Rešavanje problema korišćenjem računaraRešavanje problema korišćenjem računara
Rešavanje problema korišćenjem računara
 
odiseja homer.pptx
odiseja homer.pptxodiseja homer.pptx
odiseja homer.pptx
 

Viewers also liked

Projektovanje web aplikacija
Projektovanje web aplikacijaProjektovanje web aplikacija
Projektovanje web aplikacijaDamjan Pavlica
 
Uvod u softversko inženjerstvo
Uvod u softversko inženjerstvoUvod u softversko inženjerstvo
Uvod u softversko inženjerstvoDamjan Pavlica
 
Uvod u objektno orijentisano programiranje i C++
Uvod u objektno orijentisano programiranje i C++Uvod u objektno orijentisano programiranje i C++
Uvod u objektno orijentisano programiranje i C++Damjan Pavlica
 
Uvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik PythonUvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik PythonAmar Kalabić
 
Programiranje je samo pola price
Programiranje je samo pola priceProgramiranje je samo pola price
Programiranje je samo pola priceMerlin Rebrović
 
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...City of Corona
 
Wordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuWordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuMilan Stošić
 
May The Nodejs Be With You
May The Nodejs Be With YouMay The Nodejs Be With You
May The Nodejs Be With YouDalibor Gogic
 
Javascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar IndjijaJavascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar IndjijaDušan Stanković
 
Javascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar IndjijaJavascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar IndjijaDušan Stanković
 

Viewers also liked (20)

Projektovanje web aplikacija
Projektovanje web aplikacijaProjektovanje web aplikacija
Projektovanje web aplikacija
 
Uvod u softversko inženjerstvo
Uvod u softversko inženjerstvoUvod u softversko inženjerstvo
Uvod u softversko inženjerstvo
 
Šta je Bootstrap?
Šta je Bootstrap?Šta je Bootstrap?
Šta je Bootstrap?
 
Starenje softvera
Starenje softveraStarenje softvera
Starenje softvera
 
Uvod u objektno orijentisano programiranje i C++
Uvod u objektno orijentisano programiranje i C++Uvod u objektno orijentisano programiranje i C++
Uvod u objektno orijentisano programiranje i C++
 
Refaktorisanje
RefaktorisanjeRefaktorisanje
Refaktorisanje
 
Uvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik PythonUvod u programiranje i programski jezik Python
Uvod u programiranje i programski jezik Python
 
Terminski racun
Terminski racunTerminski racun
Terminski racun
 
Programiranje je samo pola price
Programiranje je samo pola priceProgramiranje je samo pola price
Programiranje je samo pola price
 
Nabavka prezentacija
Nabavka prezentacijaNabavka prezentacija
Nabavka prezentacija
 
Repurposed machinery
Repurposed machineryRepurposed machinery
Repurposed machinery
 
AyleenLA Creative Marketing
AyleenLA Creative Marketing AyleenLA Creative Marketing
AyleenLA Creative Marketing
 
Lwevoola C.V Jan 2013 (1)-
Lwevoola C.V Jan 2013 (1)-Lwevoola C.V Jan 2013 (1)-
Lwevoola C.V Jan 2013 (1)-
 
Resume July 21
Resume July 21Resume July 21
Resume July 21
 
Blog
BlogBlog
Blog
 
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
April 13, 2016 Public Services Committee: 2016-2017 Community-Wide Events Dis...
 
Wordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuWordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webu
 
May The Nodejs Be With You
May The Nodejs Be With YouMay The Nodejs Be With You
May The Nodejs Be With You
 
Javascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar IndjijaJavascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar Indjija
 
Javascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar IndjijaJavascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar Indjija
 

Similar to Uvod u funkcionalno programiranje

Iir oracle baza podataka xe
Iir   oracle baza podataka xeIir   oracle baza podataka xe
Iir oracle baza podataka xealeksis2013
 
Pitanja kss (1)
Pitanja  kss (1)Pitanja  kss (1)
Pitanja kss (1)Milos Ilic
 
Programski jezici u IT
Programski jezici u ITProgramski jezici u IT
Programski jezici u ITMrsevic
 
Magistarska teza - prezentacija
Magistarska teza - prezentacijaMagistarska teza - prezentacija
Magistarska teza - prezentacijaZoran Popovic
 
2019 StartIT - Symfony i 12 factor arhitektura
2019 StartIT - Symfony i 12 factor arhitektura2019 StartIT - Symfony i 12 factor arhitektura
2019 StartIT - Symfony i 12 factor arhitekturaMarko Mitranić
 

Similar to Uvod u funkcionalno programiranje (9)

Java
JavaJava
Java
 
Uvod u sql
Uvod u sqlUvod u sql
Uvod u sql
 
ICK7-L1.pptx
ICK7-L1.pptxICK7-L1.pptx
ICK7-L1.pptx
 
Iir oracle baza podataka xe
Iir   oracle baza podataka xeIir   oracle baza podataka xe
Iir oracle baza podataka xe
 
Pitanja kss (1)
Pitanja  kss (1)Pitanja  kss (1)
Pitanja kss (1)
 
Decouple Goals
Decouple GoalsDecouple Goals
Decouple Goals
 
Programski jezici u IT
Programski jezici u ITProgramski jezici u IT
Programski jezici u IT
 
Magistarska teza - prezentacija
Magistarska teza - prezentacijaMagistarska teza - prezentacija
Magistarska teza - prezentacija
 
2019 StartIT - Symfony i 12 factor arhitektura
2019 StartIT - Symfony i 12 factor arhitektura2019 StartIT - Symfony i 12 factor arhitektura
2019 StartIT - Symfony i 12 factor arhitektura
 

Uvod u funkcionalno programiranje

  • 2. FunkcionalnoFunkcionalno programiranjeprogramiranje -- uvoduvod • Razlike u odnosu na druge paradigme u programiranju – nepromenljivi (nemutabilni) parametri funkcija • funkcije služe za preslikavanje ulaznih podataka u izlazne – funkcije su "građani prvog reda" • postoje funkcijski literali, promenljive • funkcije mogu biti prenete kao parametri drugih funkcija • funkcije mogu da vrate funkcije kao svoje rezultate • Scala – objedinjuje koncepte OO, imperativ. i funkc. programiranja – "skalira" sa potrebama programera • može se koristiti za pisanje malih skripti • može se koristiti za pisanje složenih softverskih sistema -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 3. Genealoško stablo nekihGenealoško stablo nekih programskih jezikaprogramskih jezika http://www.slideshare.net/InfinITnetvaerk/a-history-of-nordic-compilers-and-autocodes -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 4. Strukturiranost i namena jezikaStrukturiranost i namena jezika http://erikengbrecht.blogspot.rs/2008/01/programming-language-continuum.html -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 5. ParadigmeParadigme uu programiranjuprogramiranju • Paradigma: – ono šta služi kao obrazac ili model – skup pretpostavki, koncepata, vrednosti – način razmišljanja – ►obrazac koji služi kao pravac razmišljanja u programiranju • Glavne paradigme• Glavne paradigme – imperativno programiranje – funkcionalno programiranje – logičko programiranje • Ortogonalno na glavne paradigme – objektno-orijentisano programiranje -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 6. Imperativno programiranjeImperativno programiranje • Programira se upotrebom: – promenljivih (varijabli) – dodela – kontrolnih struktura (uslovna grananja, ciklusi, ...) • Dva načina konceptualizacije programa• Dva načina konceptualizacije programa – sekvenca instrukcija (za von Neumann-ovu mašinu) • programer navodi svaku instrukciju – relacija između predikata • uspostavljaju se logički uslovi nad podacima u vidu predikata, mat. formulacija • Nedostaci: – loša skalabilnost programa – ograničenost principima koje je uveo von Neumann -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 7. FunkcionalnoFunkcionalno programiranjeprogramiranje • U užem smislu: – programiranje bez promenljivih, dodela ili kontrolnih struktura • U širem smislu: – programiranje sa akcentom na upotrebi funkcija • Funkcije postaju vrednosti koje se – proizvode– proizvode – konzumiraju – sastavljaju • Funkcionalan jezik pojednostavljuje ovakav pristup – funkcije mogu biti definisane unutar drugih funkcija – funkcije mogu biti parametri i rezultati drugih funkcija – postoje osnovne operacije koje omogućavaju sastavljanje funkcija -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 8. Poređenje Java/Scala (1/4)Poređenje Java/Scala (1/4) Java Scala -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 9. Poređenje Java/Scala (2/4)Poređenje Java/Scala (2/4) Person[] people; Person[] minors; Person[] adults; ... { ArrayList<Person> minorsList = new ArrayList<>(); ArrayList<Person> adultsList = new ArrayList<>(); for(int i = 0; i < people.length; i++) (people[i].age < 18 ? minorsList : adultsList) .add(people[i]); Java .add(people[i]); minors = minorsList.toArray(people); adults = adultsList.toArray(people); } Scala val people: Array[Person] val (minors, adults) = people partition (_.age < 18) -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 10. Poređenje Java/Scala (3/4)Poređenje Java/Scala (3/4) Person[] people; Person[] minors; Person[] adults; ... { ArrayList<Person> minorsList = new ArrayList<>(); ArrayList<Person> adultsList = new ArrayList<>(); for(int i = 0; i < people.length; i++) (people[i].age < 18 ? minorsList : adultsList) .add(people[i]); Java .add(people[i]); minors = minorsList.toArray(people); adults = adultsList.toArray(people); } // Kako paralelizovati? Scala val people: Array[Person] val (minors, adults) = people.par.par partition (_.age < 18) -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 11. Poređenje Java/Scala (4/4)Poređenje Java/Scala (4/4) • Novije verzije Jave su donele koncepte iz funkcionalnog programiranja – lambda funkcije – tokove (stream) za podršku paralelnoj obradi • To ukazuje na trendove povećanog interesa za FP• To ukazuje na trendove povećanog interesa za FP • Međutim – sam jezik Java je i dalje veoma eksplicitan – nije koncipiran oko ideje funkcionalnog programiranja – nije proširljiv tako da proširenja deluju kao deo osnovnog jezika -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 12. ScalaScala • Jezik razvijen u EPFL (Martin Odersky) – Poseduje sve konstrukte funkcionalnih jezika – Statičko tipiziranje – Objektno-orijentisan jezik – Funkcioniše na JVM, interoperabilnost sa Javom – Adaptiran za simbolički račun– Adaptiran za simbolički račun – Adaptiran za paralelno izvršavanje • Kao i svaki netrivijalni jezik, poseduje: – primitivne izraze – najjednostavnije entitete kojima se manipuliše – sredstvo kombinovanja – za sastavljanje složenih elemenata od jednostavnih – sredstvo apstrakcije – za imenovanje elemenata i njihovo upravljanje kao da su osnovni -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 13. Prednosti FPPrednosti FP • Manje pisanja koda – jednostavnije za razumevanje (ali zahteva veliko predznanje) – jednostavnije za održavanje, povećava produktivnost • Nema bočnih efekata – podaci "ulaze" u funkcije, ali ih funkcije ne menjaju – jednostavnije za razumevanje– jednostavnije za razumevanje – reupotrebljivost koda • Rekurzija – prirodna kontrolna struktura u funkcionalnim jezicima – alternativa za cikluse u imperativnim jezicima -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 14. Mane FPMane FP • Ulaz i izlaz – prirodna je protočna obrada, ne odgovara stilu FP • Složeniji razvoj interaktivnih aplikacija – zasnivaju se na ciklusima zahtev/odgovor – inicira korisnik • Programi koji se izvršavaju u ciklusu su složeniji za razvoj• Programi koji se izvršavaju u ciklusu su složeniji za razvoj • Manja efikasnost na modernom hardveru – FP je dominantno bio zastupljen u akademiji, gde performanse nisu bile od velikog značaja • Nije orijentisano ka podacima – dohvatanje, manipulisanja i vraćanje podataka (baze podataka) – OO pristup je prirodniji -- Funkcionalno programiranje -- ETF Beograd 2017.
  • 15. RadnoRadno okruokruženježenje • REPL (Read-Eval-Print-Loop) • IDE (ScalaIDE, Eclipse, NetBeans, IntelliJ) • http://www.scala-lang.org -- Funkcionalno programiranje -- ETF Beograd 2017.