I dag vil vi komme ind på funktionel programmering. Mere specifikt vil vi se på forskellen mellem deklarativ og imperativ programmering.
Først, lad os hurtigt gennemgå vilkårene. Derefter vil vi sammenligne disse programmeringsstile og se, hvordan de fremstår i Java, og om sproget understøtter deres lykkelige sameksistens.
Funktionel programmering er et paradigme, hvor funktioner forstås som matematiske funktioner, ikke som subrutiner, som i proceduremæssig programmering . Det vil sige, at i disse to paradigmer fortolker ordet "funktion" forskelligt. Husk dette og lad være med at forvirre dem. Java lader dig ikke blive forvirret, da underprogrammer omtales som "metoder", hvorimod funktioner refererer til matematiske funktioner (også: lambda-funktioner eller metodehenvisning).
I praksis afhænger funktioner i proceduremæssig programmering ikke kun af inputvariabler, men også af eksterne faktorer (såsom andre variabler uden for funktionen eller systemets tilstand). Det betyder, at kald af den samme funktion med de samme argumenter, men i en anden kontekst, kan give forskellige resultater. I funktionel programmering, når en funktion kaldes med de samme argumenter, producerer den altid det samme resultat, fordi funktioner kun afhænger af inputdata.
Fordele ved funktionel programmering
- Forbedret kodepålidelighed
- Praktisk enhedstest
- Muligheder for kodeoptimering under kompilering
- Muligheder for samtidighed
Ulemper ved funktionel programmering
Funktionel programmerings ulemper stammer fra alle disse samme funktioner:
-
Der er ingen opgaveerklæringer. I stedet gemmes nye værdier i nye variabler, hvilket fører til behovet for konstant at allokere og automatisk frigive hukommelse. Som et resultat heraf er meget effektiv affaldsindsamling en væsentlig del af ethvert system, der udfører funktionelle programmer.
-
Ikke-streng evaluering betyder, at rækkefølgen af funktionskald er uforudsigelig, hvilket skaber I/O-problemer, når rækkefølgen af operationer er vigtig.
Det afslutter vores hurtige gennemgang af funktionel programmering. Lad os nu gå videre til programmeringsstile.
Imperativ programmering er et programmeringsparadigme karakteriseret ved følgende funktioner:
-
Programmets kildekode består af instruktioner (udsagn).
-
Instruktionerne skal følges sekventielt.
-
Data genereret ved at udføre tidligere instruktioner kan læses fra hukommelsen ved efterfølgende instruktioner.
-
Dataene opnået ved at udføre en instruktion kan skrives til hukommelsen.
Her er hovedtræk ved imperative sprog:
- Brug af booleske variable.
- Brug af opgaveoperatøren.
- Brug af sammensatte udtryk.
- Brug af subrutiner.
Et imperativt program er som ordrer udtrykt i imperativ stemning i naturlige sprog. Med andre ord er et imperativt program en sekvens af kommandoer.
Imperative programmeringssprog inkluderer C og C++.
Deklarativ programmering er et programmeringsparadigme, hvor løsningen på et problem er specificeret. Det vil sige, at slutresultatet er beskrevet, ikke måden at opnå det på. HTML er et eksempel på et deklarativt sprog. Når vi skriver tags på dette sprog, tænker vi ikke på, hvordan elementerne bliver tegnet på siden. Vi beskriver blot, hvordan siden skal se ud.
Et andet deklarativt programmeringssprog er SQL.
Lad os sammenligne de to programmeringsstile ved at overveje et eksempel fra det virkelige liv: hvordan forklarer vi en person, hvordan man kommer til et bestemt sted?
Forestil dig denne situation: en mand kommer hen til os på gaden og spørger: "Hvordan kommer jeg til museet?"
Med en tvingende tilgang ville vi give ham algoritmen for, hvordan han kommer dertil til fods:
- vend om lige her
- gå 2 blokke i lige linje
- dreje til højre
- …
Med en deklarativ tilgang ville vi blot give adressen, og så ville personen selv komme til det rigtige sted.
Java er i øjeblikket et multi-paradigme programmeringssprog . Multi-paradigme betyder, at sproget understøtter flere paradigmer.
Under sin lange udvikling har sproget udvidet sin objektorienterede model, så dets brugere har forskellige værktøjer og kan vælge det bedste til deres specifikke opgave.
Som følge heraf understøtter Java i øjeblikket både den imperative tilgang (såsom at skrive kode til metodekald) og den deklarative tilgang (såsom de annoteringer, der er tilgængelige under kørsel).
Lad os opsummere:
-
Der er forskellige programmeringsparadigmer.
-
Der er deklarative og imperative tilgange.
-
Du bør vælge den, der er bedst egnet til den aktuelle opgave.
-
Java er et multi-paradigme sprog, der understøtter begge tilgange.
GO TO FULL VERSION