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
445
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
Nainen kokki autossa kammottavan kuoleman sähköauto-Teslan syttyessä tuleen.
https://www.is.fi/autot/art-2000011652873.html Näin vaarallisia sähköautopalot voivat olla.845157Persuja ei aluevaltuustoissa näy
Ei tunnu persuja paljon paikalliset asiat kiinnostavan, vaan ainoastaan ulkomaalaiset, joku Israel ja Trumpin fanitus.253480Päivän Riikka: Uudenkaupungin autotehdas hiljeni
Näin ne 100 000 uutta pysyvää ei-tempputyötä yksityiselle sektorille tämän hallituksen ansiosta syntyy. Työntekijöille j382828Riikka vie Suomen kohta ykköseksi työttömyyskisassa
Espanja: 10,5 % Suomi: 10,3 % Ruotsi: 9,3 % Kisa on tiukkaa, mutta Riikalla hyvä draivi päällä. Vasemmistolaisen päämin91972Kerro kaivattusi nimi tai nimikirjaimet
🌠 Tähdenlento! Kirjoittamalla kaivattusi nimen tai nimikirjaimet tähän, saattaa toiveesi toteutua.581820- 471586
Alkuvuodesta poistuu työttömyyskorvaus kaikilta joilla on säästössä rahaa
Tippuu korvaukselta iso määrä työttömiä.2631476- 941382
Tämmönen höpsö
Höpönassu mä olen. En mikään erikoinen…hölötän välillä ihan levottomia. Tykkäisit varmasti jos olisin siellä sun vieress441356Hiljaisuus
Tarkoittaa välinpitämättömyyttä, henkistä väkivaltaa ja kiusaamista. Olet valinnut hiljaisuuden.731078