Viikko 9 - Syventyminen

Johdanto

Näissä harjoituksissa hiotaan ohjelmointitaitoja oman aiheen parissa. Kuitenkin, pyri valitsemaan, loput tehtävät huomioonottaen, sopivan kokoinen aihe. Yhden funktion ohjelmalla ei pysty kunnolla harjoittelemaan, mutta liian suuri ohjelma voi muuttua loppua kohden liian työlääksi.

Tehtävä — Suunnitelma

Keksi aihe pienelle sinua kiinnostavalle tai muuten tarpeelliselle ohjelmalle. Idea-esimerkkejä ja kirjastovinkkejä on demolapun lopussa.

  1. Miten järjestelisit ohjelmasi? Millainen sen arkkitehtuuri on? Miten siinä näkyy funktio-ohjelmointi?
  2. Mitkä ovat pääasialliset tietotyypit, joita ohjelmasi manipuloi?
  3. Mitkä ovat em. tietotyyppien operaatiot?
  4. Onko niillä helposti havaittavia ja kattavia lainalaisuuksia?
  5. Millaisia konstruktioita käyttäisit lisäämään uudelleenkäytettävyyttä ja modulaarisuutta?
  6. Millaisia määrityksiä tekisit lisätäksesi koodin turvallisuutta?

Tehtävä — Toteutus

  1. Toteuta ohjelmasi ja kirjoita myös samalla olennaisimmat quickcheck testit
  2. Selvitä mitä miten Haskell ohjelmia levitetään ja luo ohjelmallesi cabal paketti.

Tehtävä — Refaktorointi

Pyri tekemään ohjelmastasi hyvin luettava, uudelleenkäytettävä ja selkeä.

  1. Jos ohjelman rakenteessa on korjattavaa, korjaa.
  2. Pyri poistamaan mahdollisimman monta if lausetta, käyttämällä guardeja ja pattern matchingia
  3. Pyri korvaamaan explisiittinen rekursio valmiilla funktioilla
  4. Pyri korvaamaan foldit valmiilla funktioilla tai tee niistä uusia yleiskäyttöisiä funktioita
  5. Pyri poistamaan lambda-lausekkeet koodistasi, esimerkiksi järjestelemällä funktioiden parametrejä uudestaan.
  6. Jaa kaikki yli 10 rivin funktiot loogisiin, nimettyihin paloihin.

* HUOM* Palauta tämän tehtävän vastaus siten, että teet uuden git-commitin jokaisesta vaiheesta ja laitat tehtävän palautukseen versionumerot talteen. Tällöin voin tarkastella mitä muutoksia on tapahtunut tehtävän aikana.

Tehtävä — Arviointi

Analysoi ohjelmaasi:

  1. Mitä vaikeuksia funktio-ohjelmointi aiheutti?
  2. Mitä hyötyjä sait funktio-ohjelmoinnista?
  3. Millainen ratkaisustasi tuli? Mitä muuttaisit?
  4. Paraniko ratkaisu refaktorointitehtävän aikana?
  5. Mikä oli vaikeaa?

Idealista

blog comments powered by Disqus