Idag kommer vi att beröra funktionell programmering. Mer specifikt kommer vi att titta på skillnaden mellan deklarativ och imperativ programmering.
Låt oss först snabbt gå igenom villkoren. Sedan ska vi jämföra dessa programmeringsstilar och se hur de ser ut i Java och om språket stödjer deras lyckliga samexistens.
Funktionell programmering är ett paradigm där funktioner förstås som matematiska funktioner, inte som subrutiner, som i procedurprogrammering . Det vill säga, i dessa två paradigm tolkar ordet "funktion" olika. Kom ihåg detta och förväxla dem inte. Java låter dig inte bli förvirrad, eftersom underprogram hänvisas till som "metoder", medan funktioner hänvisar till matematiska funktioner (även: lambda-funktioner eller metodreferens).
I praktiken, i procedurprogrammering, beror funktioner inte bara på indatavariabler utan också på externa faktorer (som andra variabler utanför funktionen eller systemets tillstånd). Det betyder att anrop av samma funktion med samma argument men i ett annat sammanhang kan ge olika resultat. I funktionell programmering, när en funktion anropas med samma argument, ger den alltid samma resultat, eftersom funktioner bara beror på indata.
Fördelar med funktionell programmering
- Förbättrad kodtillförlitlighet
- Bekväm enhetstestning
- Möjligheter till kodoptimering under kompilering
- Möjligheter till samtidighet
Nackdelar med funktionell programmering
Nackdelarna med funktionell programmering beror på alla dessa egenskaper:
-
Det finns inga uppdragsbeskrivningar. Istället lagras nya värden i nya variabler, vilket leder till behovet av att ständigt allokera och automatiskt frigöra minne. Som ett resultat är högeffektiv sophämtning en viktig del av alla system som kör funktionella program.
-
Icke-strikt utvärdering innebär att ordningen på funktionsanrop är oförutsägbar, vilket skapar I/O-problem när ordningen på operationerna är viktig.
Det avslutar vår snabba genomgång av funktionell programmering. Låt oss nu gå vidare till programmeringsstilar.
Imperativ programmering är ett programmeringsparadigm som kännetecknas av följande egenskaper:
-
Programmets källkod består av instruktioner (påståenden).
-
Instruktionerna måste följas sekventiellt.
-
Data som genereras genom att exekvera tidigare instruktioner kan läsas från minnet genom efterföljande instruktioner.
-
Data som erhålls genom att exekvera en instruktion kan skrivas till minnet.
Här är huvuddragen i imperativa språk:
- Användning av booleska variabler.
- Användning av uppdragsoperatören.
- Användning av sammansatta uttryck.
- Användning av subrutiner.
Ett imperativt program är som order uttryckta i imperativ stämning i naturliga språk. Med andra ord är ett imperativt program en sekvens av kommandon.
Imperativa programmeringsspråk inkluderar C och C++.
Deklarativ programmering är ett programmeringsparadigm där lösningen på ett problem specificeras. Det vill säga slutresultatet beskrivs, inte sättet att uppnå det. HTML är ett exempel på ett deklarativt språk. När vi skriver taggar på detta språk tänker vi inte på hur elementen kommer att ritas på sidan. Vi beskriver bara hur sidan ska se ut.
Ett annat deklarativt programmeringsspråk är SQL.
Låt oss jämföra de två programmeringsstilarna genom att överväga ett exempel från verkligheten: hur förklarar vi för en person hur man tar sig till en viss plats?
Föreställ dig den här situationen: en man kommer fram till oss på gatan och frågar: "Hur kommer jag till museet?"
Med ett imperativt tillvägagångssätt skulle vi förse honom med algoritmen för hur man tar sig dit till fots:
- vänd dig om här
- gå 2 kvarter i en rak linje
- sväng höger
- …
Med ett deklarativt förhållningssätt skulle vi helt enkelt ge adressen, och sedan skulle personen komma till rätt plats på egen hand.
Java är för närvarande ett programmeringsspråk med flera paradigm . Multiparadigm innebär att språket stödjer flera paradigm.
Under sin långa utveckling har språket utökat sin objektorienterade modell så att dess användare har olika verktyg och kan välja det bästa för sin specifika uppgift.
Som ett resultat av detta stöder Java för närvarande både det imperativa tillvägagångssättet (som att skriva kod för metodanrop) och det deklarativa tillvägagångssättet (som de anteckningar som är tillgängliga vid körning).
Låt oss sammanfatta:
-
Det finns olika programmeringsparadigm.
-
Det finns deklarativa och imperativa tillvägagångssätt.
-
Du bör välja den som är bäst lämpad för uppgiften.
-
Java är ett multiparadigmspråk som stöder båda metoderna.
GO TO FULL VERSION