logo

Funktionell programmeringsparadigm

Introduktion
Funktionell programmering är ett programmeringsparadigm där vi försöker binda allt i ren matematisk funktionsstil. Det är en deklarativ typ av programmeringsstil. Dess huvudfokus ligger på vad man ska lösa i motsats till en imperativ stil där huvudfokus är hur man löser. Den använder uttryck istället för påståenden. Ett uttryck utvärderas för att producera ett värde medan en sats exekveras för att tilldela variabler. Dessa funktioner har några speciella funktioner som diskuteras nedan.

Funktionell programmering är baserad på Lambda-kalkyl:
Lambdakalkyl är ett ramverk utvecklat av Alonzo Church för att studera beräkningar med funktioner. Det kan kallas det minsta programmeringsspråket i världen. Det ger definitionen av vad som är beräkningsbart. Allt som kan beräknas med lambda-kalkyl är beräkningsbart. Den är likvärdig med Turing-maskinen i sin förmåga att beräkna. Det ger en teoretisk ram för att beskriva funktioner och deras utvärdering. Det utgör grunden för nästan alla nuvarande funktionella programmeringsspråk.
Fakta: Alan Turing var en elev av Alonzo Church som skapade Turing-maskinen som lade grunden till imperativ programmeringsstil.



Programmeringsspråk som stöder funktionell programmering: Haskell, JavaScript, Python, Scala, Erlang, Lisp, ML, Clojure, OCaml, Common Lisp, Racket.

hur man konverterar ett heltal till en sträng i java

Koncept för funktionell programmering:

  • Rena funktioner
  • Rekursion
  • Referenstransparensfunktioner är förstklassiga och kan vara av högre ordning Variabler är oföränderliga

Rena funktioner: Dessa funktioner har två huvudegenskaper. För det första producerar de alltid samma utdata för samma argument oavsett något annat.
För det andra har de inga sidoeffekter, dvs de ändrar inte några argument eller lokala/globala variabler eller input/output-strömmar.
Senare egendom kallas oföränderlighet. Den rena funktionens enda resultat är värdet den returnerar. De är deterministiska.
Program gjorda med funktionell programmering är lätta att felsöka eftersom rena funktioner inte har några biverkningar eller dold I/O. Rena funktioner gör det också lättare att skriva parallella/samtidiga applikationer. När koden är skriven i den här stilen kan en smart kompilator göra många saker - den kan parallellisera instruktionerna, vänta med att utvärdera resultaten när de behöver dem och memorera resultaten eftersom resultaten aldrig ändras så länge indata inte ändras.
exempel på den rena funktionen:



sum(x, y) // sum is function taking x and y as arguments return x + y // sum is returning sum of x and y without changing them>

Rekursion: Det finns ingen for eller while loop i funktionella språk. Iteration i funktionella språk implementeras genom rekursion. Rekursiva funktioner kallar sig upprepade gånger tills de når basfallet.
exempel på den rekursiva funktionen:

fib(n) if (n <= 1) return 1; else return fib(n - 1) + fib(n - 2);>

Referenstransparens: I funktionella program ändrar variabler en gång definierade inte sitt värde genom hela programmet. Funktionella program har inga uppdragsuppgifter. Om vi ​​måste lagra något värde definierar vi istället nya variabler. Detta eliminerar alla risker för biverkningar eftersom vilken variabel som helst kan ersättas med dess faktiska värde när som helst. Tillståndet för varje variabel är konstant vid vilket ögonblick som helst.

Exempel:



x = x + 1 // this changes the value assigned to the variable x. // So the expression is not referentially transparent.>

Funktionerna är förstklassiga och kan vara av högre ordning: Förstaklassfunktioner behandlas som förstaklassvariabler. De första klassvariablerna kan skickas till funktioner som parameter, kan returneras från funktioner eller lagras i datastrukturer. Funktioner av högre ordning är de funktioner som tar andra funktioner som argument och de kan också returnera funktioner.

Exempel:

show_output(f) // function show_output is declared taking argument f // which are another function f(); // calling passed function print_gfg() // declaring another function print('hello gfg'); show_output(print_gfg) // passing function in another function>

Variabler är oföränderliga: I funktionell programmering kan vi inte ändra en variabel efter att den har initierats. Vi kan skapa nya variabler – men vi kan inte modifiera befintliga variabler, och detta hjälper verkligen till att upprätthålla tillståndet under hela programmets körtid. När vi väl har skapat en variabel och ställt in dess värde kan vi ha fullt förtroende och veta att värdet på den variabeln aldrig kommer att förändras.

Fördelar och nackdelar med funktionell programmering

Fördelar:

  1. Rena funktioner är lättare att förstå eftersom de inte ändrar några tillstånd och bara beror på den input som ges till dem. Vilken produktion de än producerar är det returvärde de ger. Deras funktionssignatur ger all information om dem, dvs deras returtyp och deras argument.
  2. Funktionella programmeringsspråks förmåga att behandla funktioner som värden och överföra dem till funktioner som parametrar gör koden mer läsbar och lättförståelig.
  3. Testning och felsökning är lättare. Eftersom rena funktioner bara tar argument och producerar utdata, producerar de inga ändringar, tar inte input eller producerar någon dold utdata. De använder oföränderliga värden, så det blir lättare att kontrollera vissa problem i program som skrivs använder rena funktioner.
  4. Det används för att implementera samtidighet/parallellism eftersom rena funktioner inte ändrar variabler eller andra data utanför den.
  5. Den använder lat utvärdering som undviker upprepad utvärdering eftersom värdet utvärderas och lagras endast när det behövs.

Nackdelar:

  1. Ibland kan det att skriva rena funktioner minska läsbarheten för kod.
  2. Att skriva program i rekursiv stil istället för att använda loopar kan vara lite skrämmande.
  3. Att skriva rena funktioner är enkelt men att kombinera dem med resten av applikationen och I/O-operationer är en svår uppgift.
  4. Oföränderliga värden och rekursion kan leda till sämre prestanda.

Applikationer:

hur många veckor på en månad
  • Det används i matematiska beräkningar.
  • Det behövs där samtidighet eller parallellitet krävs.

Fakta: Whatsapp behöver bara 50 ingenjörer för sina 900M användare eftersom Erlang används för att implementera sina samtidighetsbehov. Facebook använder Haskell i sitt anti-spam-system.