- Grundläggande idéer
- egenskaper
- Rena funktioner
- Första klassens funktioner
- Referensöppenhet
- Rekursion
- Oföränderlighet
- exempel
- Imperativt och deklarativt tillvägagångssätt
- Rena funktioner
- Funktioner som förstklassiga objekt
- Fördel
- Kortare och lättare att förstå
- Inget kontrollflöde
- nackdelar
- tillämpningar
- Funktionell metod
- Språk som stöder funktionell programmering
- D
- Erlang
- Haskell
- ML
- Mål Caml
- Schema
- referenser
Den funktionella programmeringen motsvarar mönsterprogrammeringen är baserad på begreppet att ange beteendet hos ett program som en funktionell matematisk modell snarare än explicita sekvenser av instruktioner till en processor, vilket är huvudbegreppet i nödvändig programmering.
Funktionellt språk betonar uttalanden och termer snarare än att utföra uttalanden. I denna programmering beror resultatet bara på parametrarna som skickas till en funktion, till skillnad från andra typer som följer ett lokalt eller globalt tillstånd.
Diagram över hur mappningsfunktionen fungerar i Haskells funktionella programmeringsspråk. Källa: Av Pluke - Eget arbete, CC0 commons.wikimedia.org.
Namnet kommer från de matematiska funktionerna, som är tilldelningen av en uppsättning ingångar till en uppsättning utgångar. En matematisk funktion gör egentligen inget arbete utan beskriver snarare modellen för en process och förklarar med hjälp av en formel vad en uppsättning ingångar producerar i en funktion.
Grundläggande idéer
Grunden för vilken funktionell programmering baserades var lambda-kalkylen, som utvecklades under det tredje decenniet av 1900-talet för att definiera och tillämpa funktioner. LISP var det första programmeringsspråket i sitt slag, designat 1960.
Även om de flesta programmeringsspråk består av ingångar, utgångar och externa variabler som kan ställas in eller användas från funktioner, undviker funktionell programmering detta. Tanken är att varje gång en funktion anropas med samma parametrar ska den returnera samma värde.
egenskaper
Funktionella programmeringsspråk kallas applikationer, eftersom funktionerna tillämpas på deras parametrar, såväl som deklarativa och icke-processuella, eftersom definitionerna anger vad som ska beräknas och inte hur det beräknas.
Rena funktioner
En funktion är ren när den inte har några observerbara biverkningar, till exempel förändring av externa variabler, filsystemändringar och så vidare.
Dessa funktioner betraktas som övertygande eftersom de inte uttryckligen kommer att ändra några variabler som andra delar av koden kan bero på någon gång. Det verkar besvärligt att koda med dessa begränsningar, men dessa funktioner måste anses vara deterministiska, förutsägbara och komposerbara.
Första klassens funktioner
Funktioner betraktas som värden som kan tilldelas variabler, så att de kan skickas till och returneras från andra funktioner. Det vill säga en funktion kan användas som om det är en parameter eller som ett värde som returneras.
Detta innebär att funktionen kan ges som sådan, snarare än bara 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.
Eftersom det är en förstklassig funktion, skulle koden (dubbel (dubbel (2)) vara densamma som den dubbla (4) koden. Detta gör att du kan häcka 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 uppdragsuppdrag. Det vill säga du måste definiera nya variabler om du vill lagra ytterligare värden. Därför är tillståndet för en variabel konstant hela tiden.
Detta eliminerar den minsta möjligheten till oönskade effekter, eftersom alla variabler kan ersättas av dess verkliga värde under vilken punkt som helst för programmets körning.
Rekursion
I funktionell programmering finns det inga "för" och "medan" slingor. Istället bygger iterationen på rekursion. Rekursion implementeras med rekursiva funktioner som kallar sig repetitivt tills basfallet nås.
Oföränderlighet
Variabler är oföränderliga, det vill säga det är inte möjligt att modifiera en variabel när den har initialiserats. Även om du kan skapa en ny variabel är det inte tillåtet att ändra befintliga variabler.
exempel
Imperativt och deklarativt tillvägagångssätt
Med ett exempel kan du analysera skillnaden mellan dessa tillvägagångssätt, genomföra samma operation i båda arrangemangen, vilket är att filtrera udda siffror från en lista och samtidigt ersätta 5 med jämna siffror mindre än 5.
Det är samma beräkning med samma resultat. Men, som ni ser, är den nödvändiga koden ordbok och inte direkt klar. Å andra sidan är det deklarativa tillvägagångssättet läsbart och uttryckligt, eftersom det fokuserar på vad du vill få.
Rena funktioner
Vad som definieras som rena och orena funktioner kan klargöras med några grundläggande exempel:
Funktioner som förstklassiga objekt
Det betyder att använda funktioner på samma sätt som data används. Därför kan de överföras som parametrar till en annan funktion. I följande exempel kan int-funktionen skickas som en parameter till kartfunktionen:
>>> lista (karta (int,))
De kan tilldelas variabler och returneras. Till exempel kan du i följande kod tilldela funktionen hello_world och sedan köra variabeln som en funktion.
Fördel
- Fokusera på vad du vill uppnå (deklarativt) och inte på hur du ska uppnå det (absolut nödvändigt).
- De innehåller inte tilldelningssatsningar, så när variabler har fått ett värde kommer de inte längre att ändras. Därför innehåller de funktionella programmen inga biverkningar.
- Det logiska flödet är klart, eftersom staten är mindre spridd och inte implicit modifieras.
- Stödjer begreppet lat utvärdering, vilket innebär att värdet endast utvärderas och lagras vid behov.
- Eftersom rena funktioner inte ändrar något tillstånd och är helt beroende av input, ä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 undvika att variablerna eller externa data ändras blir implementeringen av samtidigheten effektiv.
- Funktioner behandlas som värden och överförs till andra funktioner som parametrar. Detta förbättrar koden förståelse och läsbarhet.
- Rena funktioner tar parametrarna en gång och ger immutable output. Att använda oändliga värden gör det lättare att felsöka och testa.
Kortare och lättare att förstå
De är kortare och lättare att förstå än vad som krävs. Studier har visat att den genomsnittliga programmeraren produktivitet i termer av kodrader är mer eller mindre densamma för alla programmeringsspråk, vilket översätter till högre produktivitet.
Inget kontrollflöde
Att ringa en funktion kan inte ha någon annan effekt än beräkningen av dess resultat. Detta utesluter en viktig källa till fel, vilket också gör ordningen på exekvering irrelevant, eftersom ingen biverkning kan ändra värdet på ett uttryck, och det kan utvärderas när som helst.
Programmeraren är befriad från bördan att skapa ett flöde av kontroll. Eftersom uttryck kan utvärderas när som helst kan variabler ersättas med deras värden.
Denna autonomi gör funktionella program mer matematiskt hanterbara än konventionella program.
nackdelar
- Det funktionella programmeringsparadigmet är inte enkelt, så det är svårt för en nybörjare att förstå.
- Det är svårt att underhålla, eftersom många objekt utvecklas under kodningen.
- I vissa fall orsakar skrivning av rena funktioner en minskning av kodens läsbarhet.
- Oändliga värden i kombination med rekursion kan leda till en drastisk minskning av systemets prestanda.
- Återanvändning är mycket komplicerat och kräver ständig refactoring.
- Att skriva program i en rekursiv stil istället för att använda loopar eller slingor kan vara en mycket skrämmande uppgift.
- Objekten representerar inte problemet korrekt.
- Även om det är enkelt att skriva rena funktioner är det ganska svårt att kombinera dem med resten av applikationen och med input / output-operationerna
tillämpningar
Artificiell intelligens programmering görs på funktionella programmeringsspråk och artificiell intelligens tekniker migrerar till verkliga tillämpningar.
Det utmärker sig också i implementeringen av komplexa matematiska modeller. Av denna anledning har en av de viktigaste användningarna av funktionella språk traditionellt varit akademisk. Det är användbart för att utveckla körbara specifikationer och prototypimplementeringar.
Många funktionella språk utmärker sig också vid implementering av parallellbehandling. Detta beror på dess förmåga att dra nytta av rena funktioner, som alltid ger samma värde oavsett i vilken ordning de utförs.
Funktionell metod
WhatsApp använder Erlang-programmeringsspråket, som följer den funktionella programmeringsmodellen, vilket gör att mer än hundra av sina anställda kan hantera uppgifterna till cirka 1,6 miljarder människor.
En annan viktig bärare av den funktionella programmeringsstilen är Haskell. Det används av Facebook i sitt antispam-system. Till och med JavaScript, ett av de mest använda programmeringsspråken, vacklar egenskaperna hos ett dynamiskt typiskt funktionsspråk.
Språk som stöder funktionell programmering
D
Det designades efter C ++, och fick alla dess fördelar samtidigt som de observerade svagheterna med att vara kompatibla med C.
Erlang
Det är mycket skalbart och samtidigt, vilket gör det idealiskt för telekommunikation och andra applikationer som tar emot enorma mängder data i en oförutsägbar ordning.
Haskell
Detta är ett rent funktionellt programmeringsspråk, som använder Lambda-kalkylen.
ML
Det används i matematiska, vetenskapliga, ekonomiska, analytiska och andra applikationer. En av dess styrkor är att skapa programvara för att hantera andra program.
Mål Caml
Det är ett öppet källspråk som är baserat på Caml. Det tenderar att skapa mycket lätta program, vilket hjälper dem att ladda och springa snabbare än de som skapats av andra språk.
Schema
Det är baserat på LISP-syntaxen och ALGOL-strukturen. På grund av dess enkelhet används det i många datavetenskapskurser som en introduktion till programdesign för att visa några av de grundläggande programmen för datorprogrammering.
referenser
- Vem är värd för detta (2019). Lär dig funktionell programmering: Den här typen av kodning kommer att blåsa ditt sinne. Hämtad från: whoishostingthis.com.
- Andrea Bertoli (2019). En adekvat introduktion till funktionell programmering. Hämtad från: dev.to.
- Hacker Earth (2020). Funktionell programmering. Hämtad från: hackerearth.com.
- Clojure (2020). Funktionell programmering. Hämtad från: clojure.org.
- Akhil Bhadwal (2020). Funktionell programmering: begrepp, fördelar, nackdelar och applikationer. Hacka. Hämtad från: hackr.io.
- Guru99 (2020). Vad är funktionell programmering? Handledning med exempel. Hämtad från: guru99.com.