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

411

    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. Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos

      Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä
      Maailman menoa
      80
      2809
    2. Pelotelkaa niin paljon kuin sielu sietää.

      Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda
      Maailman menoa
      295
      1626
    3. Mikä saa ihmisen tekemään tällaista?

      Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?
      Sinkut
      246
      1527
    4. Minkä merkkisellä

      Autolla kaivattusi ajaa? Mies jota kaipaan ajaa Mersulla.
      Ikävä
      87
      1371
    5. IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!

      Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel
      Maailman menoa
      401
      1349
    6. Nyt kun Pride on ohi 3.0

      Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että
      Luterilaisuus
      396
      1273
    7. Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa

      Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat
      Suomalaiset julkkikset
      38
      1027
    8. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      2
      999
    9. Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?

      Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun
      Maailman menoa
      329
      854
    10. Miksi Purra-graffiti ei nyt olekkaan naisvihaa?

      "Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden
      Maailman menoa
      254
      832
    Aihe