I dag skal vi komme inn på funksjonell programmering. Mer spesifikt skal vi se på forskjellen mellom deklarativ og imperativ programmering.

Først, la oss raskt gå gjennom vilkårene. Deretter skal vi sammenligne disse programmeringsstilene og se hvordan de vises i Java og om språket støtter deres lykkelige sameksistens.

Funksjonell programmering er et paradigme der funksjoner forstås som matematiske funksjoner, ikke som subrutiner, som i prosedyreprogrammering . Det vil si at i disse to paradigmene tolker ordet "funksjon" forskjellig. Husk dette og ikke forvirre dem. Java lar deg ikke bli forvirret, siden underprogrammer omtales som "metoder", mens funksjoner refererer til matematiske funksjoner (også: lambda-funksjoner eller metodereferanse).

I praksis, i prosedyreprogrammering, avhenger funksjoner ikke bare av inngangsvariabler, men også av eksterne faktorer (som andre variabler utenfor funksjonen eller systemets tilstand). Det betyr at å kalle den samme funksjonen med de samme argumentene, men i en annen kontekst, kan gi forskjellige resultater. I funksjonell programmering, når en funksjon kalles med de samme argumentene, gir den alltid det samme resultatet, fordi funksjoner bare avhenger av inndata.

Fordeler med funksjonell programmering

  • Forbedret kodepålitelighet
  • Praktisk enhetstesting
  • Muligheter for kodeoptimalisering under kompilering
  • Muligheter for samtidighet

Ulemper med funksjonell programmering

Ulempene til funksjonell programmering stammer fra alle disse samme funksjonene:

  • Det er ingen oppdragserklæringer. I stedet lagres nye verdier i nye variabler, noe som fører til behovet for konstant å allokere og automatisk frigjøre minne. Som et resultat er svært effektiv søppelinnsamling en viktig del av ethvert system som kjører funksjonelle programmer.

  • Ikke-streng evaluering betyr at rekkefølgen på funksjonsanrop er uforutsigbar, noe som skaper I/O-problemer når rekkefølgen på operasjoner er viktig.

Det avslutter vår raske gjennomgang av funksjonell programmering. La oss nå gå videre til programmeringsstiler.

Imperativ programmering er et programmeringsparadigme preget av følgende funksjoner:

  • Programmets kildekode består av instruksjoner (utsagn).

  • Instruksjonene må følges sekvensielt.

  • Data generert ved å utføre tidligere instruksjoner kan leses fra minnet ved påfølgende instruksjoner.

  • Dataene oppnådd ved å utføre en instruksjon kan skrives til minnet.

Her er hovedtrekkene til imperative språk:

  • Bruk av boolske variabler.
  • Bruk av oppdragsoperatøren.
  • Bruk av sammensatte uttrykk.
  • Bruk av subrutiner.

Et imperativt program er som ordre uttrykt i imperativ stemning på naturlige språk. Med andre ord er et imperativt program en sekvens av kommandoer.

Imperative programmeringsspråk inkluderer C og C++.

Deklarativ programmering er et programmeringsparadigme der løsningen på et problem er spesifisert. Det vil si at sluttresultatet er beskrevet, ikke måten å oppnå det på. HTML er et eksempel på et deklarativt språk. Når vi skriver tagger på dette språket, tenker vi ikke på hvordan elementene skal tegnes på siden. Vi beskriver bare hvordan siden skal se ut.

Et annet deklarativt programmeringsspråk er SQL.

La oss sammenligne de to programmeringsstilene ved å vurdere et eksempel fra det virkelige liv: hvordan forklarer vi en person hvordan man kommer seg til et bestemt sted?

Se for deg denne situasjonen: en mann kommer bort til oss på gaten og spør: "Hvordan kommer jeg meg til museet?"

Med en imperativ tilnærming ville vi gi ham algoritmen for hvordan han kommer seg dit til fots:

  • snu akkurat her
  • gå 2 blokker i rett linje
  • ta til høyre

Med en deklarativ tilnærming ville vi rett og slett oppgi adressen, og så ville personen komme til rett sted på egenhånd.

Java er for tiden et programmeringsspråk med flere paradigmer . Multiparadigme betyr at språket støtter flere paradigmer.

I løpet av sin lange utvikling har språket utvidet sin objektorienterte modell slik at brukerne har forskjellige verktøy og kan velge det beste for deres spesifikke oppgave.

Som et resultat støtter Java for øyeblikket både den imperative tilnærmingen (som å skrive kode for metodekall) og den deklarative tilnærmingen (som merknadene som er tilgjengelige under kjøring).

La oss oppsummere:

  • Det finnes ulike programmeringsparadigmer.

  • Det er deklarative og imperative tilnærminger.

  • Du bør velge den som er best egnet for oppgaven.

  • Java er et multi-paradigme språk som støtter begge tilnærmingene.