Vad är funktionell programmering? Handledning med exempel

Vad är funktionell programmering?

Funktionell programmering (även kallad FP) är ett sätt att tänka kring mjukvarukonstruktion genom att skapa rena funktioner. Det undviker begrepp om delat tillstånd, föränderlig data som observeras i objektorienterad programmering.

Funktionella språk fokuserar på uttryck och deklarationer snarare än utförandet av påståenden. Därför, till skillnad från andra procedurer som beror på en lokal eller global tillstånd, beror värdeutdata i FP endast på de argument som skickas till funktionen.

Egenskaper för funktionell programmering

  • Funktionell programmeringsmetod fokuserar på resultat, inte på processen
  • Tonvikten ligger på vad som ska beräknas
  • Data är oföränderlig
  • Funktionell programmering Dela upp problemet i 'funktioner
  • Den bygger på konceptet matematiska funktioner som använder villkorade uttryck och rekursion för att utföra beräkningen
  • Det stöder inte iteration som loop-satser och villkorliga uttalanden som If-Else

Historien om funktionell programmering

  • Grunden för funktionell programmering är Lambda Calculus. Det utvecklades på 1930-talet för funktionell tillämpning, definition och rekursion
  • LISP var det första funktionella programmeringsspråket. McCarthy designade den 1960
  • I slutet av 70-talet definierade forskare vid University of Edinburgh ML(Meta Language)
  • I början av 80-talet lägger Hope-språket till algebraiska datatyper för rekursion och ekvationsresonemang
  • År 2004 Innovation av funktionellt språk "Scala."

Funktionella programmeringsspråk

Målet med alla FP-språk är att efterlikna de matematiska funktionerna. Den grundläggande beräkningsprocessen är dock annorlunda i funktionell programmering.

Här är några av de mest framträdande funktionella programmeringsspråken:

  • Haskell
  • SML
  • Clojure
  • Skala
  • Erlang
  • Rena
  • F#
  • ML/OCaml Lisp / Schema
  • XSLT
  • SQL
  • Mathematica

Grundläggande funktionell programmeringsterminologi och Concepts

Grundläggande funktionell programmeringsterminologi och Concepts

Oföränderlig data

Immutable Data innebär att du enkelt ska kunna skapa datastrukturer istället för att modifiera sådana som redan finns.

Referensöppenhet

Funktionella program ska utföra operationer precis som om det var för första gången. Så du kommer att veta vad som kan ha hänt eller inte har hänt under programmets körning och dess biverkningar. I FP-termen kallas det för referenstransparens.

modularitet

Modulär design ökar produktiviteten. Små moduler kan kodas snabbt och har större chans att återanvända vilket säkerligen leder till snabbare utveckling av program. Förutom det kan modulerna testas separat vilket hjälper dig att minska tiden som läggs på enhetstestning och felsökning.

underhåll

Underhållbarhet är en enkel term som innebär att FP-programmering är lättare att underhålla eftersom du inte behöver oroa dig för att av misstag ändra något utanför den givna funktionen.

Förstklassig funktion

'Förstaklassfunktion' är en definition som tillskrivs programmeringsspråksenheter som inte har några begränsningar för deras användning. Därför kan förstklassiga funktioner visas var som helst i programmet.

Stängning

Stängningen är en inre funktion som kan komma åt variabler för överordnade funktioner, även efter att den överordnade funktionen har exekverats.

Funktioner med högre ordning

Funktioner av högre ordning tar antingen andra funktioner som argument eller returnerar dem som resultat.

Funktioner av högre ordning tillåter partiella applikationer eller currying. Denna teknik tillämpar en funktion på dess argument ett i taget, eftersom varje applikation returnerar en ny funktion som accepterar nästa argument.

Ren funktion

En 'ren funktion' är en funktion vars ingångar deklareras som ingångar och ingen av dem ska döljas. Utgångarna deklareras också som utgångar.

Rena funktioner verkar på sina parametrar. Det är inte effektivt om man inte returnerar något. Dessutom erbjuder den samma utdata för de givna parametrarna

Exempelvis:

Function Pure(a,b)
{
	return a+b;
}

Orena funktioner

Oren fungerar precis i motsats till ren. De har dolda ingångar eller utdata; det kallas orent. Orena funktioner kan inte användas eller testas isolerat eftersom de har beroenden.

Exempelvis

int z;
function notPure(){
	z = z+10;
}

Funktionssammansättning

Funktionssammansättning är att kombinera 2 eller flera funktioner för att skapa en ny.

Delade stater

Delade tillstånd är ett viktigt koncept i OOP-programmering. I grund och botten är det att lägga till egenskaper till objekt. Till exempel, om en hårddisk är ett objekt, kan lagringskapacitet och diskstorlek läggas till som egenskaper.

Biverkningar

Biverkningar är alla tillståndsförändringar som inträffar utanför en anropad funktion. Det största målet med alla FP-programmeringsspråk är att minimera biverkningar genom att separera dem från resten av mjukvarukoden. I FP-programmering är det viktigt att ta bort biverkningar från resten av din programmeringslogik.

Fördelarna med funktionell programmering

  • Låter dig undvika förvirrande problem och fel i koden
  • Lättare att testa och köra enhetstestning och felsöka FP-kod.
  • Parallell bearbetning och samtidighet
  • Hot code-distribution och feltolerans
  • Erbjuder bättre modularitet med en kortare kod
  • Ökad produktivitet hos utvecklaren
  • Stöder kapslade funktioner
  • Funktionella konstruktioner som Lazy Map & Lists, etc.
  • Tillåter effektiv användning av Lambda Calculus

Begränsningar för funktionell programmering

  • Funktionell programmeringsparadigm är inte lätt, så det är svårt att förstå för nybörjaren
  • Svårt att underhålla eftersom många objekt utvecklas under kodningen
  • Behöver massor av hån och omfattande miljöinställning
  • Återanvändning är mycket komplicerat och behöver ständigt omstruktureras
  • Objekt kanske inte representerar problemet korrekt

Funktionell programmering vs. Objektorienterad programmering

Funktionell programmering OOP
FP använder oföränderlig data. OOP använder föränderlig data.
Följer deklarativ programmeringsbaserad modell. Följer imperativ programmeringsmodell.
Vad den fokuserar på är: "Vad du gör. i programmet." Vad den fokuserar är på "Hur du gör din programmering."
Stöder parallell programmering. Inget stöd för parallell programmering.
Dess funktioner har inga biverkningar. Metoden kan ge många biverkningar.
Flödeskontroll utförs med funktionsanrop & funktionsanrop med rekursion. Flödeskontrollprocessen utförs med slingor och villkorliga uttalanden.
Utförandeordningen av uttalanden är inte särskilt viktig. Utförandeordning av uttalanden är viktig.
Stöder både "Abstraktion över data" och "Abstraktion över beteende." Stöder endast "Abstraktion över Data".

Slutsats

  • Funktionell programmering eller FP är ett sätt att tänka kring mjukvarukonstruktion baserat på några grundläggande definierande principer
  • Funktionella programmeringskoncept fokuserar på resultat, inte på processen
  • Målet med alla FP-språk är att efterlikna de matematiska funktionerna
  • Några mest framträdande funktionella programmeringsspråk: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
  • En 'ren funktion' är en funktion vars ingångar deklareras som ingångar och ingen av dem ska döljas. Utgångarna deklareras också som utgångar.
  • Immutable Data innebär att du enkelt ska kunna skapa datastrukturer istället för att modifiera sådana som redan finns
  • Låter dig undvika förvirrande problem och fel i koden
  • Funktionell kod är inte lätt, så det är svårt att förstå för nybörjaren
  • FP använder oföränderlig data medan OOP använder föränderlig data