De belangrijk verschil tussen functioneel programmeren en imperatief programmeren is dat het functioneel programmeren beschouwt de berekeningen als wiskundige functies en vermijdt veranderende toestands- en veranderbare gegevens terwijl imperatief programmeren de uitspraken gebruikt die de programma's wijzigen.
Een programmeerparadigma biedt een stijl van het bouwen van de structuur en elementen van een computerprogramma. De programmeerparadigma's helpen om programmeertalen te classificeren op basis van hun kenmerken. Een programmeertaal kan van invloed zijn op meer paradigma's. In objectgeoriënteerd paradigma wordt het programma gestructureerd met behulp van objecten en geven de objecten berichten door met behulp van methoden. De logica-programmering kan de berekening uitsluitend in termen van wiskundige logica uitdrukken. Nog twee programmeringsparadigma's zijn functioneel programmeren en imperatief programmeren. Functioneel programmeren maakt het mogelijk om berekeningen uit te drukken als de evaluatie van wiskundige functies. Imperative programming biedt statements die de toestand van het geheugen expliciet veranderen. Dit artikel bespreekt het verschil tussen functioneel programmeren en imperatief programmeren.
1. Overzicht en belangrijkste verschil
2. Wat is Functioneel programmeren
3. Wat is imperatief programmeren
4. Overeenkomsten tussen functionele programmering en imperatieve programmering
5. Side-by-side vergelijking - Functioneel programmeren versus imperatief programmeren in tabelvorm
6. Samenvatting
Functioneel programmeren is gebaseerd op wiskunde. Het belangrijkste principe achter functionele programmering is dat alle berekeningen worden beschouwd als een combinatie van afzonderlijke wiskundige functies. Een wiskundige functie wijst inputs naar outputs toe. Neem aan dat er een functie is genaamd f (x) = x * x. De x-waarde 1 is toegewezen aan uitgang 1. De x-waarde 2 is toegewezen aan uitgang 4. De x-waarde 3 is toegewezen aan uitgang 9 enzovoort.
Figuur 01: Voorbeeld van functionele programmeertaal - Haskell
Bij functioneel programmeren worden de patronen beschouwd. De functionele programmeertalen Haskell, gebruikt de onderstaande methode om de optelling van de getallen te vinden.
De somfunctie heeft gehele getallen en het resultaat is ook een geheel getal. Het kan worden geschreven als som: [int] -> int. De sommatie kan worden gedaan door de onderstaande patronen te volgen.
som [n] = n, de som van één getal is het getal zelf.
Als er een lijst met nummers is, kan deze als volgt worden geschreven. De n staat voor het eerste getal en ns staat voor de andere nummers
sum (n, ns) = n + sum ns.
Bovenstaande patronen kunnen worden toegepast om de optelling van drie getallen te vinden die 3,4,5 zijn.
3 + som [4,5]
3 + (4 + som [5])
3+ 4 + 5 = 12
Van een functie of expressie wordt gezegd dat deze bijwerkingen heeft als deze een bepaalde status buiten het bereik ervan wijzigt of een waarneembare interactie heeft met zijn aanroepfuncties naast de terugkerende waarde. Functioneel programmeren minimaliseert deze bijwerkingen. De statuswijzigingen zijn niet afhankelijk van de functie-ingangen. Het is handig als u het gedrag van het programma begrijpt. Een nadeel van functioneel programmeren is dat het leren van functioneel programmeren moeilijker is in vergelijking met imperatief programmeren.
Imperative programming is een programmeerparadigma dat de uitspraken gebruikt die de status van een programma wijzigen. Het richt zich op het beschrijven van hoe een programma werkt. Programmeertalen zoals Java, C en C # zijn imperatieve programmeertalen. Het biedt een stapsgewijze procedure over wat te doen. Imperatieve programmeertalen bevatten structuren zoals if, else, while, voor loops, classes, objects en functions.
Figuur 02: Voorbeeld van Imperative programmeertaal - Java
De optelling van tien nummers is als volgt in Java te vinden. In elke iteratie wordt de i-waarde toegevoegd aan de som en toegewezen aan de sum-variabele. In elke iteratie blijft de somwaarde optellen bij de eerder berekende som.
int som = 0;
voor (int i = 0; i< =10; i++)
som = som + i;
Imperatieve programmering is eenvoudig te leren, te begrijpen en te debuggen. Het is gemakkelijk om de programmatoestand te vinden vanwege het gebruik van toestandsvariabelen. Sommige nadelen zijn dat het de code lang kan maken en de schaalbaarheid kan minimaliseren.
Functioneel versus imperatief programmeren | |
Functioneel programmeren is een programmeerparadigma dat berekening beschouwt als de evaluatie van wiskundige functies en vermijdt veranderende status en veranderlijke gegevens. | Imperative Programming is een programmeerparadigma dat uitspraken gebruikt die de status van een programma wijzigen. |
structuren | |
Functioneel programmeren bevat functieaanroepen en functies van hogere rangorde. | Imperative Programming bevat if, else, while, voor loops, functies, klassen en objecten. |
Programmeertalen | |
Scala, Haskell en Lisp zijn functionele programmeertalen. | C, C ++, Java zijn imperatieve programmeertalen. |
Focus | |
Functional Programming richt zich op het eindresultaat. | Imperative Programming richt zich op het beschrijven van hoe een programma werkt. |
Eenvoud | |
Functioneel programmeren is moeilijk. | Imperatieve programmering is eenvoudiger. |
Een programmeerparadigma biedt een stijl van het bouwen van de structuur en elementen van een computerprogramma. Functioneel programmeren en imperatief programmeren zijn er twee van. Het verschil tussen functioneel programmeren en imperatief programmeren is dat functioneel programmeren de berekeningen beschouwt als wiskundige functies en vermijdt het veranderen van toestands- en veranderbare gegevens terwijl imperatief programmeren de uitspraken gebruikt die de programma's wijzigen.
1. "Imperative Programming." Wikipedia, Wikimedia Foundation, 28 maart 2018. Beschikbaar Hier
2. "Functioneel programmeren." Wikipedia, Wikimedia Foundation, 28 maart 2018. Beschikbaar Hier
3.Computerphile. YouTube, YouTube, 30 augustus 2013. Beschikbaar Hier
1.'Haskell Logo'door Haskell1965 - Eigen werk, (CC BY-SA 3.0) via Commons Wikimedia
2.'14485179234'door Linux Screenshots (CC BY 2.0) via Flickr