Funktionella programmeringsegenskaper, exempel, fördelar, nackdelar
- 1742
- 68
- Per Eriksson
De Funktionell programmering Det motsvarar det programmeringsmönster som är baserat på konceptet att ange förfarandet av ett program som en matematisk funktionell modell snarare än som uttryckliga sekvenser av instruktioner till en processor, som är huvudkonceptet i den imperativa programmeringen.
Funktionellt språk betonar meningar och termer istället för att utföra instruktioner. I detta program kommer resultatet endast att bero på parametrarna som överförs till en funktion, till skillnad från andra typer som följer en lokal eller global stat.
Hur fungerar kartläggningsfunktionen i Haskell -funktionella programmeringsspråket. Källa: av Pluke - Ewn Work, CC0 Commons.Wikimedia.org.Namnet kommer från matematiska funktioner, som är tilldelningen av en uppsättning poster till en uppsättning utgångar. En matematisk funktion fungerar verkligen inte, men beskriver modellen för en process och förklarar genom en formel vad en uppsättning poster producerar i en funktion.
[TOC]
Grundidéer
Grunden som den funktionella programmeringen baserades var Lambda -beräkningen, som utvecklades under det tredje decenniet av det tjugonde århundradet för att definiera och tillämpa funktioner. Lisp var det första programmeringsspråket av denna typ, designad 1960.
Även om de flesta programmeringsspråk består av externa poster, utgångar och variabler som kan konfigureras eller användas från funktioner, förhindrar funktionell programmering det. Tanken är att varje gång en funktion kallas med samma parametrar måste den returnera samma värde.
Egenskaper
Funktionella programmeringsspråk kallas applikationer, eftersom funktionerna gäller för deras parametrar, utöver deklarativa och icke -procedurella, eftersom definitionerna anger vad du vill beräkna och inte hur det beräknas.
Rena funktioner
En funktion är ren när den inte har observerbara biverkningar, såsom förändring av externa variabler, förändringar i filsystemet etc.
Dessa funktioner betraktas som övertygande, eftersom de inte uttryckligen kommer att ändra någon variabel på vilka andra delar av koden kan bero någon gång. Det verkar obekväm kodifiering med dessa begränsningar, men det bör anses att dessa funktioner är deterministiska, förutsägbara och komponenterbara.
Första klassfunktioner
Funktionerna betraktas som värden som kan tilldelas variabler, så att de kan skicka dem till och återvända från andra funktioner. Det vill säga en funktion kan användas som om det var en parameter eller som ett värde som returneras.
Detta innebär att funktionen kan överföras som sådan, istället för endast resultatet av funktionen. Tänk till exempel på den dubbla (x) -funktionen, som returnerar dubbelt värdet på dess ingångsparameter. Således skulle dubbel (2) returnera 4.
Det kan tjäna dig: Utveckling av industriellt underhåll: Från ursprung till nutidSom en första klassfunktion skulle koden (dubbel (dubbel (2)) vara densamma som dubbelkoden (4). Detta gör det möjligt att bo en funktion som en parameter för en annan och så vidare.
Referensöppenhet
Det hänvisar till det faktum att det i detta programmeringsmönster inte finns några uppdragsmeningar. Det vill säga nya variabler bör definieras om ytterligare värden önskas. Därför är tillståndet för en variabel konstant hela tiden.
Detta eliminerar den minsta möjligheten till oönskade effekter, eftersom varje variabel kan ersättas av dess verkliga värde under alla programutförandepunkt.
Rekursion
I funktionell programmering finns det inga slingor "för" och "medan". Istället beror iteration på rekursion. Rekursion implementeras med hjälp av rekursiva funktioner, som kallar sig repetitivt tills basfallet har uppnåtts.
Oföränderlighet
Variablerna är oföränderliga, det vill säga det är inte möjligt att modifiera en variabel när den har initialiserats. Även om en ny variabel kan skapas är de befintliga variablerna inte tillåtna.
Exempel
Imperativ och förklarande tillvägagångssätt
Med ett exempel kan skillnaden mellan dessa tillvägagångssätt analyseras och utföra samma operation i båda bestämmelserna, vilket är att filtrera de udda siffrorna på en lista medan siffrorna som är mindre än 5 ersätts av 5.
Det är samma beräkning, med samma resultat. Men som man kan se är den nödvändiga koden detaljerad och är inte klar omedelbart. Å andra sidan är den deklarativa metoden läsbar och uttrycklig, eftersom den fokuserar på vad du vill få.
Rena funktioner
Du kan klargöra vad som definieras som rena och orena funktioner med några grundläggande exempel:
Funktioner som förstklassiga objekt
Betyder att använda funktioner på samma sätt som data används. Därför kan de överföra som parametrar till en annan funktion. I följande exempel kan du skicka int -funktionen som en parameter till kartfunktionen:
>>> Lista (karta (int, [“1”, “2”, “3”]))
[1, 2, 3]
De kan tilldelas variabler och returnera dem. Till exempel kan följande kod tilldelas funktionen Hello_World och sedan köra variabeln som en funktion.
Fördelar
- Fokusera på vad du vill uppnå (deklarativ) och inte hur man uppnår det (nödvändigt).
- De innehåller inte tilldelningsmeningar, så efter att variablerna har fått ett värde kommer de inte längre att ändras. Därför innehåller funktionella program inte biverkningar.
Kan tjäna dig: tekniska katastrofer- Det logiska flödet är klart, eftersom staten är mindre spridd och inte implicit modifieras.
- Medger begreppet uppskjuten utvärdering, vilket innebär att värdet endast utvärderas och lagras vid behov.
- Eftersom rena funktioner inte förändrar något tillstånd och beror helt på ingången, är de lätta att förstå. Returvärdet som ges av sådana funktioner är detsamma som resultatet som produceras av dem.
- På grund av arten av de rena funktionerna för att förhindra variablerna eller externa data från att ändra, blir implementeringen av samförstånd effektivt.
- Funktioner behandlas som värden och flyttar till andra funktioner som parametrar. Detta förbättrar kodens förståelse och läsbarhet.
- De rena funktionerna tar parametrarna en gång och producerar en oföränderlig utgång. Genom att använda oföränderliga värden underlättas rening och tester.
Kortare och lättare att förstå
De är kortare och lättare att förstå än imperativ. Studier har visat att den genomsnittliga programmerarproduktiviteten i kodrader är mer eller mindre densamma för alla programmeringsspråk och översätter i större produktivitet.
Inget kontrollflöde
När du ringer en funktion kan du inte ha en annan effekt än beräkningen av resultatet. Detta utesluter en viktig källa till fel, vilket också gör exekveringsordern irrelevant, eftersom ingen biverkning kan ändra värdet på ett uttryck, att kunna utvärderas när som helst.
Programmeraren är tillfredsställande bördan att upprätta ett kontrollflöde. Eftersom uttryck kan utvärderas när som helst kan variabler ersättas av deras värden.
Denna autonomi gynnar att funktionella program är mer matematiskt hanterbara än konventionella program.
Nackdelar
- Det funktionella programmeringsparadigmet är inte enkelt, så det blir svårt att förstå för en nybörjare.
- Det är svårt att underhålla, eftersom många objekt under kodning utvecklas.
- I vissa fall orsakas en minskning av kodens läsbarhet när man skriver rena funktioner.
- Immutable värden i kombination med rekursion kan leda till en drastisk minskning av systemprestanda.
- Återanvändning är mycket komplicerad och behöver konstant refaktorisering.
- Att skriva program med en rekursiv stil istället för att använda band eller slingor kan vara en mycket nedslående uppgift.
- Objekt kanske inte representerar problemet korrekt.
Det kan tjäna dig: 50 rekommenderade videospelbloggar- Även om att skriva rena funktioner visar sig vara enkelt, är det ganska svårt att kombinera dem med resten av applikationen och med input/utgångsoperationer
Ansökningar
Artificiell intelligensprogram utförs på funktionella programmeringsspråk och konstgjorda intelligensstekniker migrerar till verkliga applikationer.
Sticker också ut i implementeringen av komplexa matematiska modeller. Av denna anledning har en av de viktigaste användningarna av funktionella språk traditionellt varit akademiska. Det är användbart för att utveckla körbara specifikationer och prototypimplementeringar.
Många funktionella språk sticker också ut för att implementera parallellbehandling. Detta beror på dess förmåga att dra nytta av rena funktioner, som alltid returnerar samma värde oavsett vilken ordning de körs.
Funktionell metodik
WhatsApp använder Erlag -programmeringsspråket, som följer den funktionella programmeringsmodellen, vilket gör att mer än hundra av dess anställda kan hantera uppgifterna som tillhör cirka 1.600 miljoner människor.
En annan viktig bärare av den funktionella programmeringsstilen är Haskell. Det används av Facebook i ditt antispamsystem. Till och med JavaScript, ett av de mest använda programmeringsspråken, har egenskaperna hos ett dynamiskt funktionsspråk.
Språk som stöder funktionell programmering
D
Det designades efter C ++, och fick alla dess fördelar samtidigt som de eliminerade dess svagheter som observerats för att behöva vara förenliga med C.
Erlang
Det är mycket skalbart och samtidigt, vilket gör det idealiskt för telekommunikation och andra applikationer som får enorma mängder data i en oförutsägbar ordning.
Haskell
Detta är ett rent funktionellt programmeringsspråk som använder Lambda -beräkningen för det.
Ml
Det används i matematiska, vetenskapliga, ekonomiska, analytiska och andra typer av andra typer. En av dess styrkor är att skapa programvara för att hantera andra program.
Objektiv caml
Det är ett open source -språk som är baserat på CAML. Det tenderar att skapa mycket lätta program och hjälpa dem att laddas och köras snabbare än de som skapas av andra språk.
Schema
Det är baserat på LISP -syntax och algolstruktur. Tack vare dess enkelhet används den i många datorkurser som en introduktion till utformningen av program för att visa några av grunden för datorprogrammering.
Referenser
- Whho är värd för detta (2019). Lär dig funktionell programmering: Denna kodningsstil kommer att blåsa ditt sinne. Taget från: whoisosting detta.com.
- Andrea Bertoli (2019). En adekvat introduktion till funktionell programmmmm. Taget från: dev.till.
- Hacker Earth (2020). Funktionell programmering. Taget från: Hakereph.com.
- Clojure (2020). Funktionell programmering. Taget från: Clojure.org.
- Akhil Bhadwal (2020). Funktionell programmering: koncept, äventyr, nackdelar och applikationer. Hackr. Taget från: hackr.Io.
- Guru99 (2020). Vad är funktionell programmering? Med exempelhandledning. Taget från: Guru99.com.