Deklaratiivinen ohjelmointi

Vuonna 1948 YK hyväksyi Ihmisoikeuksien yleismaailmallisen julistuksen, jossa määritellään jokaiselle ihmiselle kuuluvia perusoikeuksia. Mutta miten se liittyy ohjelmointiin? Deklaratiiviseen ohjelmointiin on hyvä tutustua tutkimalla hieman, mitä tuo sana oikein tarkoittaa; Englanniksi Declare voidaan suomentaa ’julistaa’ tai ’ilmoittaa’. Kuten ihmisoikeuksien julistuksessakaan deklaratiivisessa ohjelmoinnissa ei kerrota, miten asiat toteutetaan, vaan ilmoitetaan, mitä halutaan.

Deklaratiivista ohjelmointia pidetään usein vastakohtana imperatiiviselle ohjelmoinnille, mikä auttaa ensi silmäyksellä hahmottamaan molempia konsepteja. Imperatiivisessa keskitytään tarkkaan tapahtumaketjuun, kun deklaratiivisessa puolestaan todetaan asioita ja käytetään niitä murehtimatta tarkasta toteutuksesta. Tästä erinomainen esimerkki on perinteinen SQL-komento:

-- Valitaan ohjelmointi_kieltet-nimisestä taulusta
-- kaikkien niiden nimet,
-- joiden status on paras:

select nimi from ohjelmointi_kielet where status = 'Paras';

SQL-komennoissa kerrotaan, mitä tietoja tietokannasta halutaan hakea, ja jätetään toteutus tietokantamoottorin murheeksi. Todellisuudessahan deklaratiivinen ohjelmointi on abstraktiotaso imperatiivisen systeemin päällä, ja tietokone tarvitsemat imperatiiviset komennot on täytynyt toteuttaa jossain.

<html>
  <head>
    <title>Deklratiivinen HTML</title>
  </head>
  <body>
    <p>HTML on luonteeltaan puhtaasti deklaratiivinen. Esimerkiksi <p> merkki tarkoittaa: "Tässä kohdassa on kappale, jossa lukee näin."</p>
  </body>
</html>

Voidaan myös sanoa, että kaikki kirjastot ja ohjelmistokehykset muuttavat ohjelmointia deklaratiiviseen suuntaan, ja siksi ohjelmointikielten lajittelu deklaratiivisiin ja imperatiivisiin ei ehkä ole vaivan arvoista. Näiden erojen ymmärtäminen kuitenkin kannattaa, sillä se auttaa valitsemaan oikeat työkalut kuhunkin tilanteeseen.

Kaikkiaan deklaratiivinen ohjelmointi on tarkemman toteutuksen piilottamista ja keskittymistä siihen, mitä halutaan saada aikaiseksi. Vaikkei heittäytyisikään täysin deklaratiivisen ohjelmoinnin syleilyyn, sen ymmärtäminen auttaa hahmottamaan ja suunnittelemaan omaa koodiaan paremmin.


Lähteet

  1. https://blog.ndepend.com/declarative-programming-depth/
  2. https://www.youtube.com/watch?v=4A2mWqLUpzw

Imperatiivinen ohjelmointi

Ohjelmoinnin perusteet, olio-ohjelmointi 1, olio-ohjelmointi 2, olio-ohjelmointi N, valaistuminen. Tällä tavoin kuvittelin ohjelmointiosaamisen kasvavan ajan myötä, kun vielä olin kirjoittamassa ensimmäisiä ohjelmiani koulussa. Alussa toki on hyvä opetella kävelemään yhdessä ympäristössä, mutta jossakin vaiheessa kannattaa myös pistäytyä ulkona. Olen jo jonkin verran törmännyt muihin ohjelmointiparadigmoihin, eli – lyhyesti – yleisiin tapoihin muotoilla koodin rakenne, mutta päätin vihdoinkin selvittää kunnolla, mitä kaikkia niitä onkaan. (Niitä olikin yllättävän paljon).

Tässä postauksessani sukellan imperatiivisen ohjelmoinnin (imperative programming) maailmaan, koska juurista on hyvä lähteä liikkeelle. Kokeilen teemaan liittyen hieman Fortrania, joka on melkoinen reliikki kaikkiin muihin käyttämiini ohjelmointikieliin, mutta silti ilmeisesti suosittu tietyissä piireissä.

Mitä on imperatiivinen ohjelmointi?

Lyhyesti imperatiivinen ohjelmointi on tarkkojen ohjeiden antamista siitä, miten ohjelma kuuluu suorittaa. Jos on ollut hereillä äidinkielen tunnilla, saattaa muistaa, että imperatiivi tarkoittaa käskymuotoa. Tyypillinen arkipäivän esimerkki on ruuanlaittoreseptit: Sekoita kananmunat ja vehnäjauhot, lisää joukkoon sokeri, ja niin edelleen.

! Määritellään muuttujat
! "Kakku on 40 merkkiä pitkä jono merkkejä"
  character (len = 40) :: kakku
  character (len = 10) :: ainesosa1
  character (len = 10) :: ainesosa2

! Ohjelmalogiikka
  ainesosa1 = "mansikka"
  ainesosa2 = "jäätelö"
  kakku = ainesosa1//"-"//ainesosa2//"-kakku"

! Huomaa kuinka aiemmin varattiin paikka muistissa, ja nyt siihen kyseiseen paikkaan asetetaan arvo.
! Imperatiiviselle ohjelmoinnille on tyypillistä näyttää: Tähän asetetaan tämä.

! Tulostetaan lopputulos
  print *, kakku

Tämä on tietysti ohjelmointiin luonnollinen tapa, kun tietokoneen prosessorin komennot toimivat imperatiivisesti. Imperatiivisessa ohjelmoinnissa siis annetaan järjestyksessä suoritettavia komentoja, jotka sitten muuttavat ohjelman tilaa. Sille tyypillisiä ominaisuuksia ovat toistorakenteet (erilaiset loopit), ehtolauseet(if-lauseet) ja poikkeukset.

! Do looppi!
! Kierretään viisi kierrosta ja kirjataan kierrosten lukumäärä
  do n = 1, 5
    kierroksia = kierroksia + 1
    print *, kierroksia
  end do

Imperatiivinen ohjelma voidaan jakaa aliohjelmiin, mutta toiminta periaate ei muutu. Tästä hyvin tyypillinen esimerkki on proseduraalinen ohjelmointi (procedural programming). Vastakohtana imperatiiviselle ohjelmoinnille puolestaan on deklaratiivinen ohjelmointi (declarative programming), jossa keskitytään enemmän kysymykseen ”mitä” kuin ”miten”.

Siinä imperatiivinen ohjelmointi lyhyesti tältä tasolta katsottuna. Mikäli asia kiinnostaa enemmän, kurkkaa pari lähdettä, joita käytin tätä kirjoittaessa.


Lähteet

  1. https://www.computerhope.com/jargon/i/imp-programming.htm
  2. https://www.geeksforgeeks.org/introduction-of-programming-paradigms/
  3. https://www.tutorialspoint.com/fortran/index.htm

Hello, World!

print('Tervetuloa, kaikki!')

Tämä on ensimmäinen blogikirjoitukseni. Olen aloitteleva ohjelmistokehittäjä, ja työskentelen paljon tietokantojen parissa. Täällä kotisohvalla on kuitenkin tarkoitus pitää työt poissa mielestä, joten aion kirjoitella kaikenlaista yleistä ohjelmistokehityksestä ja koodailla omia pieniä projektejani vähän joka puolelta. Alkuperäinen ideani onkin päästä kirjoittamaan projekteistani, kerrata oppimaani ja saada motivaatiota projektien loppuun viemiseen. Ajattelin jakaa joitakin projekteja Git Hubissa, jolloin ehkä muutkin voisivat osallistua. Toivottavasti jorinoistani on apua tai iloa. Tervetuloa mukaan!

Design a site like this with WordPress.com
Aloitus