Funktionaalisen ja proseduraalisen moduulin ero?

plz

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?

4

442

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. SDP palauttaa Suomen kansalle kulta-ajat

      Hyvinvointivalto on pääosin SDP:n ja osin myös Maalaisliiton rakentama. Hyvinvointivaltion ylläpito edellyttää oikeude
      Maailman menoa
      154
      13525
    2. Aamun Riikka: työttömyydessä lähestytään viime laman synkintä vaihetta

      Nopeasti mentiiin upean Marinin hallituksen ennätystyöllisyydestä toiseen ääripäähän, kohti Suomen historian kurjimpia t
      Maailman menoa
      74
      9804
    3. Älkää vassarit kuvitelko, että Marinin kulta-ajat palaavat

      Vaikka demarit voittaisivat seuraavat vaalit, se ei palauta Marinin taskut-täyteen-kelasta-aikaa takaisin, ei voi eikä h
      Maailman menoa
      99
      9172
    4. Suomen velka kasvoi ennätysvauhtia - Mäkynen repostelee

      – Velka kasvoi eniten tilaston historiassa, Mäkynen kirjoittaa. – Vuoden 2025 toisella neljänneksellä selvästi eniten k
      Maailman menoa
      21
      8149
    5. Giorgia Meloni vs Riikka Purra

      Kyllä Italian pääministeri on kauniimpi ja seksikkäämpi, kuin Suomen valtiovarainministeri Riikka Purra. Mitä jotkut näk
      Maailman menoa
      40
      6783
    6. 150
      6195
    7. Gallup, PS:lle JÄRISYTTÄVÄ nousu, SDP suurin laskija

      https://yle.fi/a/74-20186114 PS kovaa vauhtia nousemassa ennen 2027 vaaleja suurimmaksi puolueeksi. Nyt mennään jo etua
      Maailman menoa
      68
      4297
    8. Ohhoh. Kokoomusvirkamiehen mukaan Suomessa ei ole työttömyyskriisiä

      Kun kokoomuksen johtama hallitus epäonnistuu täydellisesti talouspolitiikassaan, niin aikaisemmin erittäin pahaksi määri
      Maailman menoa
      24
      3415
    9. Persut JYTKYTTÄÄ ylös, ohi kepun! +2,1 %

      Persut palasi kolmen suurimman joukkoon ja on matkalla kohti kevään 2027 eduskuntavaalivoittoa. Sosialistit ovat syöksy
      Maailman menoa
      39
      2877
    10. En lähde armeijaan enkä siviilipalvelukseen

      Maanantaina telkan uutisissa toistamiseen kerrottiin tästä luuserista, joka kärsii muka "masennuksesta", mutta nauraa rä
      Maailman menoa
      398
      1285
    Aihe