Voisiko joku vääntää tyhmälle rautalangasta, että mikä noiden kahden ero oikeastaan on? (mielellään jollain ohjelmointiesimerkillä, esim. python-kielellä)
Tiedän, että funktiossa moduuli palauttaa arvon / proseduuri ei, mutta miten nämä sitten käytännössä eroavat toisistaan?
Funktionaalisen ja proseduraalisen moduulin ero?
4
431
Vastaukset
- anomyymi koodari
Proseduraalisessa ohjelmoinnissa jokainen askel muuttaa ohjelman tilaa. Funktionaalisessa ohjelmassa ohjelman tila ei muutu.
- brbbrbrb
Funktio palauttaa samalle syötteelle aina saman paluuarvon. Tuo ei tule koskaan muuttumaan, joten siihen voi luottaa. Ns. imperatiivisissa ohjelmointikielissä, ohjelman tila muuttuu käytännössä joka askeleella, mikä voi sitä kautta aina muuttaa myös minkä tahansa funktion vastetta jollekin syötteelle, jos kyseinen funktio ´vuotaa´tilaa ulkopuolelleen. Tuo vuotaminen johtaa siihen, että funktion merkitys ei välttämättä selviä imperatiivisessa ohjelmoinnissa sen funktion esityksestä vaan seurausten ymmärtämiseksi on ymmärrettävä koko ohjelma, jossa funktio esiintyy. Funktionaalisessa ohjelmoinnissa näin ei ole, koska kielissä tuo vuotaminen on nimenomaan pyritty estämään. Tästä seuraa se etu, että kun funkition kerran määrittelee tekemään asian A jollekin syötteelle B, se tekee sen aina kaikissa yhteyksissä mihin funktion tuo mukaan. Tässä tietysti onnistuminen riippuu sitten, kuinka hyvin on osannut johtaa funktion syömöt tyypit ja paluuarvojen tyypit.
Funktionaalisessa ohjelmoinnissa tyypit ja arvot ovat vaihdannisia siten, että jos tyyppikuvaus on tehty riittävän tarkkaan, ohjelman arvon muuttuminen voidaan johtaa tyypeistä ja päinvastoin. Funktionaalisessa ohjelmoinnissa sitten kytketään eri funktioita toisiinsa ketjuun ja siten niiden kuvaamia muunnoksia suhteessa toisiinsa. Koko tämä ketju muodostaa kuvauksen joltain lähtöarvojen avaruudelta tuloavaruuden arvoille, eikä siinä kuvauksessa puhtaimmillaan ole tippaakaan ohjelman tilaa mukana.
Yksinään funktionaalinen ohjelma ei olisi kovin kiinnostava, koska ilman ohjelman tilaan sotkeutumista, arvojen lähtöarvoja ja tuloarvoja ei voitaisi kommunikoida ohjelmalle. Funktionaalisissa ohjelmissa on siis lisäksi työkaluja, joilla funktionaalisesti puhdas osa (suurin osa) ohjelmaa sitten kytketään tilaa käsitteleviin osiin (input, tiedostot, jne) niin, että se kaunis ja puhdas osa ei mene pilalle. Jos ohjelmassa on vikaa jossain niin se on ohjelmoijan esittämissä abstraktioissa tai sitten siinä, missä funktionaalinen osa kohtaa osan, jossa ympäröivän maailman tila on abstrahoitu tilan sisältävän kuplan sisään. :) Tuo kupla suojelee varsinaista ohjelmaa tilan muuttumisen leviämiseltä kaikkialle kuin tauti, minkä jälkeen seurausten ymmärtäminen eri kohdissa tulisi väistämättä aikaa myöten hankalammaksi ja mahdollisuus bugien ilmenemiseen kasvaa. - vöriisimpöööl
Funktionaalinen ohjelmointi tekee ohjelmoinnille saman, kuin fysiikassa yksiköiden käyttäminen tekee laskuille. Sen sijaan, että laskettaisiin pelkillä luvuilla, kuljetetaan rinnalla mukana yksiköiden laskentaa. Seuraamalla yksiköitä, voidaan laskun tila sisäistää eri kohdissa paremmin ja laskujen lopuksi yksiköstä voidaan tarkistaa, onko se saatu tulos oikeaa muotoa.
- ewqweqwe
Toinen perustuu vähän niin kuin Turingin konstruktioon tai oikeastaan rekisterikoneeseen ja toinen primitiivirekursiivisten funktioiden konstruktioon. Ei sen kummempaa.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa
En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod315909- 345413
- 293064
- 342454
- 412203
- 372118
- 152098
- 121701
En ole koskaan kokenut
Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka191687Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...
Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons391676