Functionele programmeerkenmerken, voorbeelden, voor-, nadelen

Functionele programmeerkenmerken, voorbeelden, voor-, nadelen

De Functioneel programmeren Het komt overeen met het programmeerpatroon dat is gebaseerd op het concept van het vermelden van een programma als een wiskundig functioneel model in plaats van als expliciet.

Functionele taal benadrukt zinnen en voorwaarden in plaats van instructies uit te voeren. In dit programma is het resultaat alleen afhankelijk van de parameters die aan een functie worden doorgegeven, in tegenstelling tot andere typen die een lokale of wereldwijde staat gehoorzamen.

Hoe werkt de kaartfunctie in de functionele programmeertaal van Haskell. Bron: door Pluke - Eigen werk, CC0 Commons.Wikimedia.borg.

De naam komt van wiskundige functies, die de toewijzing zijn van een set vermeldingen aan een reeks uitgangen. Een wiskundige functie werkt echt niet, maar beschrijft het model van een proces en legt door een formule uit wat een set inzendingen produceert in een functie.

[TOC]

Basisideeën

De basis waarop de functionele programmering was gebaseerd, was de Lambda -berekening, die werd ontwikkeld in het derde decennium van de twintigste eeuw om functies te definiëren en toe te passen. Lisp was de eerste programmeertaal van dit type, ontworpen in 1960.

Hoewel de meeste programmeertalen bestaan ​​uit externe vermeldingen, uitgangen en variabelen die kunnen worden geconfigureerd of gebruikt uit functies, voorkomt functionele programmering dit. Het idee is dat elke keer dat een functie met dezelfde parameters wordt aangeroepen, deze dezelfde waarde moet retourneren.

Kenmerken

Functionele programmeertalen worden applicaties genoemd, omdat de functies van toepassing zijn op hun parameters, naast declaratief en niet -procedureel, omdat de definities specificeren wat u wilt berekenen en niet hoe het wordt berekend.

Pure functies

Een functie is puur wanneer deze geen waarneembare bijwerkingen heeft, zoals wijziging van externe variabelen, veranderingen in het bestandssysteem, enz.

Deze functies worden beschouwd als overtuigend, omdat ze niet uitdrukkelijk elke variabele zullen veranderen waarop andere delen van de code op een bepaald moment kunnen afhangen. Het lijkt ongemakkelijk codificeren met deze beperkingen, maar het moet worden overwogen dat deze functies deterministisch, voorspelbaar en componabel zijn.

First Class -functies

De functies worden beschouwd als waarden die kunnen worden toegewezen aan variabelen, zodat ze ze kunnen doorgeven aan en terugkeren van 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 verzonden, in plaats van alleen het resultaat van de functie. Overweeg bijvoorbeeld de dubbele (x) -functie, die tweemaal de waarde van de invoerparameter retourneert. Dus zou het dubbele (2) terugkeren 4.

Het kan u van dienst zijn: Evolutie van industrieel onderhoud: van oorsprong tot heden

Zoals een eersteklas functie is, zou de code (dubbel (dubbel (2)) hetzelfde zijn als de dubbele code (4). Dit maakt het mogelijk om een ​​functie te nestelen als een parameter van een andere, enzovoort.

Referentiële transparantie

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

Dit elimineert de minste mogelijkheid van ongewenste effecten, omdat elke variabele kan worden vervangen door de reële waarde ervan tijdens een programma -uitvoeringspunt.

Herhaling

Bij functionele programmering zijn er geen lussen "voor" en "while". In plaats daarvan hangt iteratie af van recursie. Recursie wordt geïmplementeerd met behulp van recursieve functies, die zichzelf herhaaldelijk noemen totdat de basisscenario is bereikt.

Onveranderlijkheid

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

Voorbeelden

Imperatieve en declaratieve benaderingen

Met een voorbeeld kan het verschil tussen deze benaderingen worden geanalyseerd, waarbij dezelfde bewerking in beide bepalingen wordt uitgevoerd, namelijk het filteren van de oneven nummers van een lijst, terwijl de getallen kleiner dan 5 worden vervangen door 5.

Het is dezelfde berekening, met hetzelfde resultaat. Zoals te zien is, is de imperatieve code echter gedetailleerd en is niet onmiddellijk duidelijk. Aan de andere kant is de declaratieve aanpak leesbaar en expliciet, omdat deze zich richt op wat u wilt verkrijgen.

Pure functies

U kunt verduidelijken wat wordt gedefinieerd als pure en onzuivere functies met enkele basisvoorbeelden:

Functies zoals eersteklas objecten

Betekent het gebruik van functies op dezelfde manier als gegevens worden gebruikt. Daarom kunnen ze als parameters doorgeven aan een andere functie. In het volgende voorbeeld kunt u de int -functie doorgeven als een parameter aan de kaartfunctie:

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

[1, 2, 3]

Ze kunnen worden toegewezen aan variabelen en retourneren. De volgende code kan bijvoorbeeld de hello_world -functie worden toegewezen en vervolgens de variabele als een functie uitvoeren.

Voordelen

- Focus op wat u wilt bereiken (declaratief) en niet hoe u dit kunt bereiken (noodzakelijk).

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

Kan u van dienst zijn: technologische rampen

- De logische stroom is duidelijk, omdat de staat minder verspreid is en niet impliciet is gewijzigd.

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

- Aangezien pure functies geen enkele status veranderen en volledig afhankelijk zijn van de ingang, zijn ze gemakkelijk te begrijpen. De retourwaarde gegeven door dergelijke functies is dezelfde als het resultaat dat door hen is geproduceerd.

- Vanwege de aard van de zuivere functies van het voorkomen van de variabelen of externe gegevens die veranderen, wordt de implementatie van de overeenstemming effectief.

- Functies worden behandeld als waarden, die naar andere functies zijn, zoals parameters. Dit verbetert het begrip en de leesbaarheid van de code.

- De pure functies nemen de parameters eenmaal aan, waardoor een onveranderlijke exit wordt geproduceerd. Door onveranderlijke waarden te gebruiken, worden zuivering en tests vergemakkelijkt.

Korter en gemakkelijker te begrijpen

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

Geen controlestroom

Wanneer u een functie aanroept, kunt u geen ander effect hebben dan de berekening van het resultaat. Dit sluit een belangrijke bron van fouten uit, waardoor de uitvoeringsvolgorde ook niet relevant is, omdat geen bijwerking de waarde van een uitdrukking kan veranderen, op elk gewenst moment kunnen worden geëvalueerd.

De programmeur is de last van de structuur van een controlestroom. Omdat uitdrukkingen op elk moment kunnen worden geëvalueerd, kunnen variabelen worden vervangen door hun waarden.

Deze autonomie is voorstander dat functionele programma's wiskundig beheersbaar zijn dan conventionele programma's.

Nadelen

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

- Het is moeilijk te handhaven, omdat tijdens het coderen veel objecten evolueren.

- In sommige gevallen wordt bij het schrijven van pure functies een vermindering van de leesbaarheid van de code veroorzaakt.

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

- Hergebruik is erg ingewikkeld en heeft constante refactorisatie nodig.

- Programma's schrijven met een recursieve stijl in plaats van het gebruik van banden of lussen kan een zeer ontmoedigende taak zijn.

- Objecten kunnen het probleem niet correct vertegenwoordigen.

Het kan je van dienst zijn: 50 aanbevolen blogs van videogames

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

Toepassingen

Artificial Intelligence Program wordt uitgevoerd in functionele programmeertalen en kunstmatige intelligentietechnieken migreren naar echte toepassingen.

Valt ook op in de implementatie van complexe wiskundige modellen. Om deze reden is een van de belangrijkste toepassingen van functionele talen traditioneel academisch geweest. Het is nuttig voor het ontwikkelen van uitvoerbare specificaties en prototype -implementaties.

Veel functionele talen vallen ook op om parallelle verwerking te implementeren. 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 ERLAG -programmeertaal, die volgt op het functionele programmeermodel, waardoor meer dan honderd van zijn werknemers de gegevens van ongeveer 1 kan verwerken.600 miljoen mensen.

Een andere belangrijke drager van de functionele programmeerstijl is Haskell. Het wordt door Facebook gebruikt in uw Antispam -systeem. Zelfs JavaScript, een van de meest gebruikte programmeertalen, heeft de eigenschappen van een dynamische functionele taal.

Talen die functioneel programmeren ondersteunen

D

Het werd ontworpen na C ++, het verkrijgen van al zijn voordelen terwijl het zijn zwakke punten elimineerde waargenomen om compatibel te zijn met C.

Erlang

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

Haskell

Dit is een pure functionele programmeertaal, die de lambda -berekening ervoor gebruikt.

Ml

Het wordt gebruikt in wiskundige, wetenschappelijke, financiële, analytische en andere soorten andere typen. Een van de sterke punten is om software te maken om andere programma's af te handelen.

Objectieve Caml

Het is een open source -taal die is gebaseerd op CAML. Het heeft de neiging om zeer lichte programma's te maken, waardoor ze sneller worden geladen en uitgevoerd dan die gecreëerd door andere talen.

Schema

Het is gebaseerd op LISP -syntaxis en algolstructuur. Dankzij de eenvoud wordt het in veel computercursussen gebruikt als een inleiding tot het ontwerp van programma's om enkele van de basis van computerprogrammering te tonen.

Referenties

  1. Whho organiseert dit (2019). Leer functionele programmering: deze stijl van coderen zal je verbazen. Genomen uit: whoisosting this.com.
  2. Andrea Bertoli (2019). Een adequate introductie tot functioneel programmmmmmm. Genomen uit: dev.naar.
  3. Hacker Earth (2020). Functioneel programmeren. Genomen van: Hakereph.com.
  4. Clojure (2020). Functioneel programmeren. Genomen uit: clojure.borg.
  5. Akhil Bhadwal (2020). Functionele programmering: concepten, avontages, nadelen en toepassingen. Hackr. Genomen van: hackr.Io.
  6. Guru99 (2020). Wat is functioneel programmeren? Met voorbeeld tutorial. Genomen uit: guru99.com.