Functionele programmeerkenmerken, voorbeelden, voordelen, nadelen

4190
Philip Kelley
Functionele programmeerkenmerken, voorbeelden, voordelen, nadelen

De functionele programmering komt overeen met het programmeerpatroon dat is gebaseerd op het concept van het vermelden van de procedure van een programma als een wiskundig functioneel model in plaats van als expliciete reeksen instructies voor een processor, wat het belangrijkste concept is bij imperatief programmeren.

Functionele taal legt de nadruk op uitspraken en termen in plaats van uitspraken uit te voeren. Bij deze programmering is het resultaat alleen afhankelijk van de parameters die aan een functie worden doorgegeven, in tegenstelling tot andere typen die voldoen aan een lokale of globale status.

Schema van hoe de mapping-functie werkt in de functionele programmeertaal Haskell. Bron: door Pluke - Eigen werk, CC0 commons.wikimedia.org.

De naam komt van de wiskundige functies, die de toewijzing zijn van een set inputs aan een set outputs. Een wiskundige functie doet eigenlijk niet echt werk, maar beschrijft het model van een proces en legt door middel van een formule uit wat een set inputs in een functie oplevert.

Artikel index

  • 1 Basisideeën
  • 2 kenmerken
    • 2.1 Pure functies
    • 2.2 Eersteklas functies
    • 2.3 Referentiële transparantie
    • 2.4 Recursie
    • 2.5 Onveranderlijkheid
  • 3 voorbeelden
    • 3.1 Dwingende en declaratieve benaderingen
    • 3.2 Pure functies
    • 3.3 Functioneert als eersteklas objecten
  • 4 voordelen
    • 4.1 Korter en gemakkelijker te begrijpen
    • 4.2 Geen stuurstroom
  • 5 nadelen
  • 6 Toepassingen
    • 6.1 Functionele methodologie
    • 6.2 Talen die functionele programmering ondersteunen
  • 7 referenties

Basisideeën

De basis waarop functioneel programmeren was gebaseerd, was de lambda-calculus, die in het derde decennium van de 20e eeuw werd ontwikkeld om functies te definiëren en toe te passen. LISP was de eerste programmeertaal in zijn soort, ontworpen in 1960.

Hoewel de meeste programmeertalen bestaan ​​uit inputs, outputs en externe variabelen die kunnen worden ingesteld of gebruikt vanuit functies, wordt dit vermeden door functioneel programmeren. Het idee is dat elke keer dat een functie wordt aangeroepen met dezelfde parameters, deze dezelfde waarde moet retourneren.

Kenmerken

Functionele programmeertalen worden applicaties genoemd, omdat de functies worden toegepast op hun parameters, evenals declaratieve en niet-procedurele, aangezien de definities specificeren wat moet worden berekend en niet hoe het wordt berekend.

Pure functies

Een functie is puur als deze geen waarneembare bijwerkingen heeft, zoals wijziging van externe variabelen, wijzigingen in het bestandssysteem, etc..

Deze functies worden als overtuigend beschouwd, omdat ze niet expliciet variabelen zullen veranderen waarvan andere delen van de code op een bepaald moment afhankelijk zouden kunnen zijn. Het lijkt onhandig om met deze beperkingen te coderen, maar deze functies moeten als deterministisch, voorspelbaar en samenstelbaar worden beschouwd..

Eersteklas eigenschappen

Functies worden beschouwd als waarden die aan variabelen kunnen worden toegewezen, zodat ze kunnen worden doorgegeven aan en geretourneerd door andere functies. Dat wil zeggen, een functie kan worden gebruikt alsof het een parameter is of als een waarde die wordt geretourneerd.

Dit houdt in dat de functie als zodanig kan worden doorgegeven, in plaats van alleen het resultaat van de functie. Beschouw bijvoorbeeld de functie double (x), die tweemaal de waarde van de invoerparameter retourneert. Dus dubbel (2) zou 4 teruggeven.

Omdat het een eersteklas functie is, zou de (dubbele (dubbele (2)) code hetzelfde zijn als de dubbele (4) code. Hierdoor kun je een functie nesten als een parameter van een andere, enzovoort.

Referentiële transparantie

Het verwijst naar het feit dat er in dit programmeerpatroon geen toewijzingsinstructies zijn. Dat wil zeggen dat er nieuwe variabelen moeten worden gedefinieerd als u extra waarden wilt opslaan. Daarom is de toestand van een variabele altijd constant.

Dit elimineert de minste mogelijkheid van ongewenste effecten, omdat elke variabele kan worden vervangen door zijn werkelijke waarde tijdens elk punt van uitvoering van het programma..

Herhaling

Bij functioneel programmeren zijn er geen "for" en "while" -lussen. In plaats daarvan is iteratie afhankelijk van recursie. Recursie wordt geïmplementeerd met behulp van recursieve functies, die zichzelf herhaaldelijk aanroepen totdat het basisscenario is bereikt.

Onveranderlijkheid

Variabelen zijn onveranderlijk, dat wil zeggen dat het niet mogelijk is om een ​​variabele te wijzigen nadat deze is geïnitialiseerd. Hoewel er een nieuwe variabele kan worden gemaakt, is het wijzigen van bestaande variabelen niet toegestaan.

Voorbeelden

Dwingende en declaratieve benaderingen

Met een voorbeeld kunt u het verschil tussen deze benaderingen analyseren door dezelfde bewerking uit te voeren in beide arrangementen, namelijk het filteren van de oneven getallen uit een lijst terwijl u even getallen kleiner dan 5 vervangt door 5..

Het is dezelfde berekening, met hetzelfde resultaat. Zoals u kunt zien, is de dwingende code echter uitgebreid en niet onmiddellijk duidelijk. Aan de andere kant is de declaratieve benadering leesbaar en expliciet, omdat deze zich richt op wat je wilt krijgen.

Pure functies

Wat wordt gedefinieerd als pure en onzuivere functies, kan worden verduidelijkt met enkele basisvoorbeelden:

Functioneert als eersteklas objecten

Het betekent dat functies op dezelfde manier worden gebruikt als gegevens worden gebruikt. Daarom kunnen ze als parameters worden doorgegeven aan een andere functie. In het volgende voorbeeld kan de functie int worden doorgegeven als parameter aan de mapfunctie:

>>> lijst (map (int, ["1", "2", "3"]))

[1, 2, 3]

Ze kunnen aan variabelen worden toegewezen en geretourneerd. In de volgende code kunt u bijvoorbeeld de functie hello_world toewijzen, en vervolgens de variabele als een functie uitvoeren.

Voordeel

- Concentreer u op wat u wilt bereiken (declaratief) en niet op hoe u het wilt bereiken (imperatief).

- Ze bevatten geen toewijzingsinstructies, dus nadat variabelen een waarde hebben gekregen, zullen ze niet langer veranderen. Daarom bevatten functionele programma's geen bijwerkingen.

- De logische stroom is duidelijk, aangezien de toestand minder verspreid is en niet impliciet wordt gewijzigd.

- Ondersteunt het concept van luie evaluatie, wat betekent dat de waarde alleen wordt geëvalueerd en opgeslagen wanneer dat nodig is.

- Omdat pure functies geen enkele status veranderen en volledig afhankelijk zijn van invoer, zijn ze gemakkelijk te begrijpen. De geretourneerde waarde die door dergelijke functies wordt gegeven, is hetzelfde als het resultaat dat erdoor wordt geproduceerd.

- Vanwege de aard van de pure functies om te voorkomen dat de variabelen of externe gegevens veranderen, is de implementatie van de gelijktijdigheid effectief.

- Functies worden als waarden behandeld en als parameters aan andere functies doorgegeven. Dit verbetert het begrip en de leesbaarheid van de code..

- Pure functies nemen de parameters één keer en produceren onveranderlijke uitvoer. Door onveranderlijke waarden te gebruiken, worden foutopsporing en testen eenvoudiger.

Korter en gemakkelijker te begrijpen

Ze zijn korter en gemakkelijker te begrijpen dan imperatieven. Studies hebben aangetoond dat de gemiddelde productiviteit van een programmeur in termen van coderegels min of meer hetzelfde is voor elke programmeertaal, wat zich vertaalt in een hogere productiviteit.

Geen controlestroom

Het aanroepen van een functie kan geen ander effect hebben dan het berekenen van het resultaat. Dit sluit een belangrijke bron van fouten uit, waardoor ook de volgorde van uitvoering irrelevant wordt, aangezien geen secundair effect de waarde van een uitdrukking kan veranderen, en het kan op elk moment geëvalueerd worden.

De programmeur wordt ontlast van de last om een ​​controlestroom tot stand te brengen. Omdat uitdrukkingen op elk moment kunnen worden geëvalueerd, kunnen variabelen worden vervangen door hun waarden.

Deze autonomie bevordert dat functionele programma's wiskundig beter beheersbaar zijn dan conventionele programma's..

Nadelen

- Het functionele programmeerparadigma is niet eenvoudig, waardoor het voor een beginner moeilijk te begrijpen is.

- Het is moeilijk te onderhouden, aangezien veel objecten tijdens het coderen evolueren.

- In sommige gevallen leidt het schrijven van pure functies tot een vermindering van de leesbaarheid van de code.

- Onveranderlijke waarden in combinatie met recursie kunnen leiden tot een drastische vermindering van de systeemprestaties.

- Hergebruik is erg ingewikkeld en vereist constante refactoring.

- Het schrijven van programma's in een recursieve stijl in plaats van het gebruik van loops of loops kan een zeer lastige taak zijn..

- Objecten geven het probleem mogelijk niet correct weer.

- Hoewel het schrijven van pure functies eenvoudig blijkt te zijn, is het vrij moeilijk om ze te combineren met de rest van de applicatie en met de invoer- / uitvoerbewerkingen

Toepassingen

Het programmeren van kunstmatige intelligentie gebeurt in functionele programmeertalen en kunstmatige-intelligentietechnieken migreren naar toepassingen in de echte wereld.

Het blinkt ook uit in de implementatie van complexe wiskundige modellen. Om deze reden is een van de belangrijkste toepassingen van functionele talen van oudsher academisch. Het is handig voor het ontwikkelen van uitvoerbare specificaties en prototype-implementaties.

Veel functionele talen blinken ook uit in het implementeren van parallelle verwerking. Dit komt door het vermogen om te profiteren van pure functies, die altijd dezelfde waarde retourneren, ongeacht de volgorde waarin ze worden uitgevoerd..

Functionele methodologie

WhatsApp gebruikt de programmeertaal Erlang, die het functionele programmeermodel volgt, waardoor meer dan honderd medewerkers de gegevens van zo'n 1,6 miljard mensen kunnen verwerken.

Een andere belangrijke drager van de functionele programmeerstijl is Haskell. Het wordt door Facebook gebruikt in zijn antispamsysteem. Zelfs JavaScript, een van de meest gebruikte programmeertalen, pronkt met de eigenschappen van een dynamische functionele taal.

Talen die functionele programmering ondersteunen

D

Het is ontworpen na C ++, waarbij alle voordelen werden behaald terwijl de waargenomen zwakke punten van compatibiliteit met C werden geëlimineerd.

Erlang

Het is zeer schaalbaar en gelijktijdig, waardoor het ideaal is voor telecommunicatie- en andere toepassingen die enorme hoeveelheden gegevens in een onvoorspelbare volgorde ontvangen..

Haskell

Dit is een puur functionele programmeertaal, die Lambda-calculus gebruikt.

ML

Het wordt gebruikt in wiskundige, wetenschappelijke, financiële, analytische en andere toepassingen. Een van zijn sterke punten is het maken van software voor andere programma's.

Doelstelling Caml

Het is een open source taal die is gebaseerd op Caml. Het heeft de neiging om zeer lichtgewicht programma's te maken, waardoor ze sneller worden geladen en uitgevoerd dan programma's die door andere talen zijn gemaakt.

Schema

Het is gebaseerd op de LISP-syntaxis en de ALGOL-structuur. Vanwege zijn eenvoud wordt het in veel computerwetenschappelijke cursussen gebruikt als een inleiding tot programmaontwerp om enkele basisprincipes van computerprogrammering te laten zien.

Referenties

  1. Wie host dit (2019). Leer functioneel programmeren: deze stijl van coderen zal je verbazen. Genomen van: whoishostingthis.com.
  2. Andrea Bertoli (2019). Een adequate inleiding tot functioneel programmeren. Genomen uit: dev.to.
  3. Hacker Earth (2020). Functioneel programmeren. Genomen uit: hackerearth.com.
  4. Clojure (2020). Functioneel programmeren. Genomen uit: clojure.org.
  5. Akhil Bhadwal (2020). Functioneel programmeren: concepten, voordelen, nadelen en toepassingen. Hack. Genomen uit: hackr.io.
  6. Guru99 (2020). Wat is functioneel programmeren? Tutorial met voorbeeld. Genomen van: guru99.com.

Niemand heeft nog op dit artikel gereageerd.