Close menu
Close menu

Tunnistaudu

Kirjaudu

Etkö ole vielä jäsen?

Liity jäseneksi

Racket-ohjelmointi

Racket-ohjelmointikieli on funktionaalinen ohjelmointikieli eli lähestymistapa ohjelmointiin tässä on täysin erilainen kuin ns. valtavirran ohjelmointikielillä. Racket-ohjelmoinnissa komennot eivät ole pelkästään peräkkäisiä vaan enemmänkin sisäkkäisiä.

DrRacket-ohjelman eli editorin voit ladata osoitteesta: https://racket-lang.org/download/

Ohjelma, joka piirtää 400×400 ”ikkunaan” keskelle 200×200 kokoisen vihreän neliön ja sen sisälle keltaisen tekstin on seuraavanlainen.

(require 2htdp/image)
(overlay/xy
  (overlay/xy
    (text "MOI" 50 "yellow")
    -50 -50
     (rectangle 200 200 "solid" "green"))
  -100 -100
(rectangle 400 400 "solid" "blue"))

Tässä on käytetty horisontiaalista näkymää, jolloin kirjoita koodi vasemman puoleiseen ikkunaan ja paina Run. Lopputuloksen näet oikeanpuolisessa ikkunassa.


Lisäksi voit käyttää Webselaimessa toimivaa editoria, joka löytyy osoitteessa: https://www.wescheme.org

Huomio: Web-selaimessa ei tarvitse ladata grafiikka-kirjastoa eli jätä kirjoittamatta komento: (require 2htdp/image)

Tehdään muutamia huomioita koodista. Kaikki komennot kirjoitetaan sulkujen ( ) sisään. Se tarkoittaa, että varsinainen komento muodostuu parametreistä eli syötteistä. Eli komento (text ”MOI” 50 ”yellow”) kirjoittaa keltaisen tekstin ”MOI” fonttikoolla 50 komentoikkunaan. Tekstillä ei ole koordinaattipisteitä vaan tulostus tapahtuu konsoli-ikkunaan. Vastaavasti komento (rectangle 200 200 ”solid” ”green”) piirtää vihreän neliön, jonka koko on 200×200. Myöskään vihreällä nelilöllä ei ole koordinaatteja vaan tulostus tapahtuu konsoli-ikkunaan.

Katsotaan seuraavaa osakoodia vähän tarkemmin.

  (overlay/xy
    (text "MOI" 50 "yellow")
    -50 -50
    (rectangle 200 200 "solid" "green"))

Kuinka keltainen teksti saadaan siirrettyä vihreän neliön sisälle? Siihen tarvitaan uusi funktio nimeltään overlay/xy, jonka syötteenä on keltainen teksti ja vihreä neliö. Laitamme ensin syötteeksi eteen tulevan kuvion eli tekstin. Jonka jälkeen annamme siirtymän, että kuinka paljon jälkimmäistä kuviota (taakse tulevaa kuviota) eli vihreää neliötä siirretään suhteessa ensimmäiseen kuvioon eli tekstiin sekä vaaka-, että pystysuunnassa. Eli ajattele, että origo on nyt keltaisen tekstin vasemmassa ylänurkassa ja vihreää neliötä (sen vasenta ylänurkka pistettä) siirretään tästä pisteestä 50 askelta vasemmalle eli negatiiviseen suuntaan ja 50 askelta ylös eli myös negatiiviseen suuntaan.

Koska varsinaista tulostusikkunaa ei ole (jonka kokoa voitaisiin muuttaa), niin sen voi korvata toinen neliö, jonka väri on sininen ja koko 400 x 400. Kun haluamme siirtää tämän neliön suhteessa keltaisen tekstin ja vihreän neliön muodostamaan kokonaisuuteen, niin tarvitsemme uuden overlay/xy funktion. Tässä taas ajattele, että origo on nyt vihreän nelilön vasemmassa yläkulmassa ja sinistä neliötä (sen vasenta ylänurkkaa) siirretään tästä pisteestä 100 askelta vasemmalle eli negatiiviseen suuntaan ja 100 askelta ylöspäin eli sekin negatiiviseen suuntaan. Origon paikka ei ole kiinteä vaan sen määrittää syötteen ensimmäinen kuvio. Koska ohjelmassa on kolme kuviota, niin tarvitsemme kaksi overlay/xy komentoa ja siksi origon paikka vaihtuu.

Ohjelmointiprosessin voisi kuvata seuraavalla tavalla.

Kaikki komennot pitäisi nähdä funktioiden syötevirtana, jolloin kaikki funktiot muodostavat sisäkkäisten funktioiden ketjun. Siinä mielessä tämä ympäristö on erilainen kuin muut esitellyt ohjelmointiympäristöt.

Ohjeita Internetissä: https://racket.koodiaapinen.fi/ ja https://racket-lang.org/

Huomioita

  • Täysin erilainen ohjelmointikokemus. Komennot nähdään sisäkkäisten funktioiden syötevirtana.
  • Opetusmateriaalia on hyvin saatavissa, koska löytyy aktiivinen yhteisö.
  • Alkuun pääseminen on helppoa, mutta isojen ohjelmien tekeminen voi olla haastavaa, koska sisäkkäisten funktioiden muodostamat ketjut voi olla pitkiä. Turhautumisen mahdollisuus, jos ajatus harhailee.
  • Soveltuu parhaiten tietyntyyppisiin ongelman ratkaisuihin eli kun syötteet ja tulosteet on tiedossa heti alussa, niin ohjelma saadaan toimimaan ongelmitta halutulla tavalla, varsinkin jos ongelmaan löytyy valmis funktio. Esimerkiksi tilastollinen laskeminen on valmiilla funktioilla helppoa. Jos ohjelmaan pitää saada uusia syötteitä tai tulosteita, niin koodin korjaus myöhemmin voi olla työlästä.
  • Kiinteän koordinaatiston puute hankaloittaa grafiikan koodaamista. Konsoli-ikkunamaisuus on rasite grafiikan teossa.
  • Aloittelijoille ohjelmointi alussa on helppoa, kun käytetään yksittäisiä komentoja (funktioita) , mutta kun on käytössä useita sisäkkäisiä funktioita, niin on hieman haastava ohjelmointikieli.
  • Racket-kielen käyttö rajoittuu helposti vain opetuskäyttöön. Vaikea löytää käytännön hyötyä tälle ohjelmointikielelle eli kiinnostus tähän on ns. akateeminen. Jos kuitenkin innostuit tästä, niin tutustu myös Haskell-kieleen, joka on myös funktionaalinen-kieli ja sitä käytetään jonkin verran työelämässä/yliopistossa. Kannattaa muistaa, että esimerkiksi Processing, P5JS ja JavaScript-kielellillä voidaan ohjelmoida sekä funktionalisella tyylillä, että olio-ohjelmointi tyylillä, joten näillä on helpompi opettaa eri ohjelmointityylien eroja.