Funktionaalinen ohjelmointi on ohjelmointiparadigma, jossa yritämme sitoa kaiken puhtaasti matemaattisten funktioiden tyyliin. Se on deklaratiivinen ohjelmointityyli. Sen pääpaino on "mitä ratkaista” toisin kuin pakottava tyyli, jossa pääpaino on ”Miten ratkaista". Se käyttää lausekkeita lausekkeiden sijaan. Lauseke arvioidaan tuottamaan arvo, kun taas lauseke suoritetaan muuttujien määrittämiseksi.
Funktionaalisen ohjelmoinnin käsitteet
Kaikkien toiminnallisten ohjelmointikielten odotetaan noudattavan näitä käsitteitä.
- Puhtaat toiminnot:Näillä funktioilla on kaksi pääominaisuutta. Ensinnäkin ne tuottavat aina saman tulosteen samoihin argumentteihin riippumatta mistään muusta. Toiseksi niillä ei ole sivuvaikutuksia, eli ne muokkaavat mitä tahansa argumenttia tai globaaleja muuttujia tai tuottavat jotain.
- Rekursio:Toiminnallisissa kielissä ei ole "for"- tai "while"-silmukkaa. Iteraatio toiminnallisilla kielillä toteutetaan rekursion avulla.
- Toiminnot ovat ensiluokkaisia ja voivat olla korkeampia:Ensimmäisen luokan funktioita käsitellään ensimmäisen luokan muuttujina. Ensimmäisen luokan muuttujat voidaan välittää funktioille parametreina, ne voidaan palauttaa funktioista tai tallentaa tietorakenteisiin.
- Muuttujat ovat muuttumattomia:Toiminnallisessa ohjelmoinnissa emme voi muokata muuttujaa sen alustuksen jälkeen. Voimme luoda uusia muuttujia – mutta emme voi muokata olemassa olevia muuttujia.
Toiminnallinen ohjelmointi Pythonissa
Python tukee myös toiminnallisen ohjelmoinnin paradigmoja ilman erityisominaisuuksien tai kirjastojen tukea.
Puhtaat toiminnot
Kuten edellä on käsitelty, puhtailla funktioilla on kaksi ominaisuutta.
- Se tuottaa aina saman tulosteen samoille argumenteille. Esimerkiksi 3+7 on aina 10 riippumatta siitä, mitä.
- Se ei muuta tai muokkaa syöttömuuttujaa.
Toinen ominaisuus tunnetaan myös nimellä muuttumattomuus. Pure Functionin ainoa tulos on sen palauttama arvo. Ne ovat deterministisiä. Toiminnallisen ohjelmoinnin avulla tehtyjen ohjelmien virheenkorjaus on helppoa, koska puhtailla funktioilla ei ole sivuvaikutuksia tai piilotettuja I/O:ita. Puhtaat toiminnot helpottavat myös rinnakkaisten/samanaikaisten sovellusten kirjoittamista. Kun koodi on kirjoitettu tällä tyylillä, älykäs kääntäjä voi tehdä monia asioita - se voi rinnastaa ohjeet, odottaa tulosten arvioimista tarvittaessa ja muistaa tulokset, koska tulokset eivät koskaan muutu niin kauan kuin syöte ei muutu.
Esimerkki:
# Python-ohjelma esitettäväksi
# puhtaita toimintoja
# Puhdas toiminto, joka ei
# muuttaa syöttöluetteloa ja
# palauttaa uuden luettelon
def
puhdas_funktio(
Lista
):
Uusi_luettelo
=
[]
varten
i
sisään
Lista
:
New_List.append(i
*
*
2
)
palata
Uusi_luettelo
# Kuljettajan koodi
Original_List
=
[
1
,
2
,
3
,
4
]
Modified_List
=
puhdas_toiminto(alkuperäinen_luettelo)
Tulosta
(
"Alkuperäinen lista:"
, Original_List)
Tulosta
(
"Muokattu lista:"
, Modified_List)
Lähtö:
Alkuperäinen luettelo: [1, 2, 3, 4]Muokattu luettelo: [1, 4, 9, 16]
Rekursio
Toiminnallisen ohjelmoinnin aikana ei ole käsitettävarten
silmukka taisillä aikaa
silmukka, sen sijaan käytetään rekursiota. Rekursio on prosessi, jossa funktio kutsuu itseään suoraan tai epäsuorasti. Rekursiivisessa ohjelmassa tarjotaan ratkaisu perustapaukseen ja isomman ongelman ratkaisu ilmaistaan pienempinä ongelmina. Voi herää kysymys, mikä on perustapaus? Perustapausta voidaan pitää ehtona, joka käskee kääntäjää tai tulkkia poistumaan funktiosta.
Huomautus:Katso lisätietojaRekursio
Esimerkki:Tarkastellaan ohjelmaa, joka löytää listan kaikkien elementtien summan käyttämättä mitään for-silmukkaa.
# Python-ohjelma esitettäväksi
#rekursio
# Rekursiivinen funktio löydettäväksi
# listan summa
def
Summa
(L, i, n, määrä):
# Perustapaus
jos
n <
=
minä:
palata
Kreivi
Kreivi
+
=
L[i]
# Menee rekursioon
Kreivi
=
Summa
(L, i
+
1
, n, määrä)
palata
Kreivi
# Kuljettajan koodi
L
=
[
1
,
2
,
3
,
4
,
5
]
Kreivi
=
0
n
=
len
(L)
Tulosta
(
Summa
(L,
0
, n, määrä))
Lähtö:
15
Toiminnot ovat ensiluokkaisia ja voivat olla korkeampia
Ensiluokkaisia esineitä käsitellään tasaisesti kauttaaltaan. Ne voidaan tallentaa tietorakenteisiin, välittää argumentteina tai käyttää ohjausrakenteissa. Ohjelmointikielen sanotaan tukevan ensiluokkaisia toimintoja, jos se käsittelee toimintoja ensiluokkaisina objekteina.
Ensimmäisen luokan funktioiden ominaisuudet:
- Funktio on objektityypin esiintymä.
- Voit tallentaa funktion muuttujaan.
- Voit siirtää funktion parametrina toiselle funktiolle.
- Voit palauttaa funktion funktiosta.
- Voit tallentaa ne tietorakenteisiin, kuten hash-taulukoihin, listoihin,…
# Python-ohjelma esitettäväksi
# korkeamman asteen toimintoa
def
huutaa (teksti):
palata
text.upper()
def
kuiskaus (teksti):
palata
text.lower()
def
tervehtiä(func):
# tallentaa funktion muuttujaan
tervehdys
=
func(
"Hei, minut on luotu argumenttina annetulla funktiolla."
)
Tulosta
(tervehdys)
tervehtiä (huutaa)
tervehtiä (kuiskata)
Lähtö:
Hei, minut on luotu argumenttina annetulla funktiolla.
Huomautus:Lisätietoja on kohdassaEnsimmäisen luokan toiminnot Pythonissa.
Sisäänrakennetut korkeamman asteen toiminnot
Python on ottanut käyttöön joitain yleisesti käytettyjä korkeamman asteen funktioita helpottaakseen iteroitavien objektien, kuten luetteloiden ja iteraattorin, käsittelyä. Nämä funktiot palauttavat iteraattorin, joka on tilaa säästävä. Jotkut sisäänrakennetuista korkeamman asteen toiminnoista ovat:
- Kartta():map()-funktio palauttaa luettelon tuloksista, kun annettua funktiota on käytetty tietyn iterablen jokaiseen kohteeseen (luettelo, monikko jne.)
Syntaksi:kartta (hauskaa, iter)
Parametrit:
hauskaa:Se on funktio, jolle kartta välittää tietyn iteroitavuuden jokaisen elementin.
iter:Se on iteroitava, joka on kartoitettava.Palautustyyppi:Palauttaa karttaluokan iteraattorin.
Esimerkki:
# Python-ohjelma toimivuuden osoittamiseksi
# kartasta.
# Palauta kaksinkertainen n:stä
def
lisäys(n):
palata
n
+
n
# Tuplaamme kaikki numerot käyttämällä map()
numeroita
=
(
1
,
2
,
3
,
4
)
tuloksia
=
kartta
(lisäys, numerot)
# Ei tulosta arvoa
Tulosta
(tulokset)
# Tulostusarvolle
varten
tulos
sisään
tulokset:
Tulosta
(tulos, loppu
=
" "
)
Lähtö:
2 4 6 8 Huomautus:Lisätietoja on kohdassaPython map() -funktio
- suodattaa():Filter()-menetelmä suodattaa annetun sekvenssin funktion avulla, joka testaa sekvenssin jokaisen elementin olevan tosi vai ei.
Syntaksi:suodatin (funktio, järjestys)
Parametrit:
toiminto:funktio, joka testaa, onko sekvenssin jokainen elementti tosi vai ei.
järjestys:suodatettava sekvenssi, se voi olla minkä tahansa iteraattorin joukkoja, listoja, monikoita tai säiliöitä.Palautustyyppi:palauttaa iteraattorin, joka on jo suodatettu.
Esimerkki:
# Python-ohjelma toimivuuden osoittamiseksi
suodattimen #.
#-toiminto, joka suodattaa vokaalit
def
hauska (muuttuva):
kirjaimet
=
[
'a'
,
'e'
,
'minä'
,
'o'
,
'u'
]
jos
(muuttuja
sisään
kirjaimet):
palata
Totta
muu
:
palata
Väärä
#sekvenssi
järjestys
=
[
'g'
,
'e'
,
'e'
,
'j'
,
"k"
,
's'
,
'p'
,
'r'
]
# käyttämällä suodatintoimintoa
suodatettu
=
suodattaa
(hauskaa, sarja)
Tulosta
(
"Suodatetut kirjaimet ovat:"
)
varten
s
sisään
suodatettu:
Tulosta
(s)
Lähtö:
Suodatetut kirjaimet ovat: ee
Huomautus:Lisätietoja on kohdassafilter() Pythonissa
- Lambdan toiminnot:Pythonissa anonyymi funktio tarkoittaa, että funktiolla ei ole nimeä. Kuten jo tiedämme, def-avainsanaa käytetään normaalien funktioiden määrittämiseen ja lambda-avainsanaa anonyymien funktioiden luomiseen.
Syntaksi:
lambda-argumentit: lauseke
1) Tällä funktiolla voi olla mikä tahansa määrä argumentteja, mutta vain yksi lauseke, joka arvioidaan ja palautetaan.
2) Lambda-funktioita voi käyttää vapaasti missä tahansa funktioobjekteja tarvitaan.
3) Sinun on pidettävä tietosi siitä, että lambda-funktiot on syntaktisesti rajoitettu yhteen lausekkeeseen.
4) Sillä on erilaisia käyttötarkoituksia tietyillä ohjelmoinnin aloilla muiden funktioiden lausekkeiden lisäksi.Esimerkki:
# Python-koodi esitettäväksi
# lambda
kuutio
=
lambda
x: x
*
x
*
x
Tulosta
(kuutio(
7
))
L
=
[
1
,
3
,
2
,
4
,
5
,
6
]
on tasan
=
[x
varten
x
sisään
L
jos
x
%
2
=
=
0
]
Tulosta
(on tasan)
Lähtö:
343 [2, 4, 6]
Huomautus:Lisätietoja on kohdassaPython lambda.
Muuttumattomuus
Muuttumattomuus on toiminnallinen ohjelmointiparadigma, jota voidaan käyttää virheenkorjaukseen, koska se aiheuttaa virheen siellä, missä muuttujaa muutetaan, ei siellä, missä arvoa muutetaan. Python tukee myös joitain muuttumattomia tietotyyppejä, kuten merkkijono, monikko, numeerinen jne.
Esimerkki:
# Python-ohjelma esitettäväksi
# muuttumaton tietotyyppi
# Merkkijonotietotyypit
muuttumaton
=
"GeeksforGeeks"
# muuttaa arvoja
# aiheuttaa virheen
muuttumaton[
1
]
=
"K"
Lähtö:
Traceback (viimeisin puhelu viimeisin): Tiedosto "/home/ee8bf8d8f560b97c7ec0ef080a077879.py", rivi 10immutable[1] = 'K'TypeError: 'str'-objekti ei tue kohteen määritystä
Ero toiminnallisen ohjelmoinnin ja olioohjelmoinnin välillä
Oliopohjaiset kielet ovat hyviä, kun asioilla on kiinteät toiminnot, ja koodin kehittyessä lisäät ensisijaisesti uusia asioita. Tämä voidaan saavuttaa lisäämällä uusia luokkia, jotka toteuttavat olemassa olevia menetelmiä, ja olemassa olevat luokat jätetään yksin.
Toiminnalliset kielet ovat hyviä, kun sinulla on kiinteä joukko asioita, ja koodisi kehittyessä lisäät ensisijaisesti uusia toimintoja olemassa oleviin asioihin. Tämä voidaan saavuttaa lisäämällä uusia toimintoja, jotka laskevat olemassa olevilla tietotyypeillä, ja olemassa olevat funktiot jätetään yksin.
TOIMINNALLINEN OHJELMOINTI | OLIO-OHJELMOINTI |
---|---|
Tämä ohjelmointiparadigma korostaa funktioiden käyttöä, jossa jokainen toiminto suorittaa tietyn tehtävän. | Tämä ohjelmointiparadigma perustuu olio-käsitteeseen. Luokkia käytetään, kun objektien esiintymä luodaan |
Käytetyt peruselementit ovat muuttujat ja funktiot. Funktioiden tiedot ovat muuttumattomia (ei voi muuttaa luomisen jälkeen). | Käytetyt peruselementit ovat objekteja ja menetelmiä, ja tässä käytetty data on muuttuvaa dataa. |
Se noudattaa deklaratiivista ohjelmointimallia. | Se noudattaa pakollista ohjelmointimallia. |
Se käyttää iterointiin rekursiota. | Se käyttää silmukoita iterointiin. |
Se on rinnakkaisohjelmointituettu. | Se ei tue rinnakkaisohjelmointia. |
Tämän ohjelmointiparadigman lauseiden ei tarvitse noudattaa tiettyä järjestystä suorituksen aikana. | Tämän ohjelmointiparadigman lauseiden on noudatettava järjestystä eli alhaalta ylös -lähestymistapaa suorituksen aikana. |
Viimeksi päivitetty :11. lokakuuta 2021
Kuten artikkeli
Tallenna artikkeli