Vakiot¶
Tätä kappaletta varten täytyy ensin lukea Piirtokomennot.
Racketissä on mahdollista antaa nimiä eri arvoille.
Tämä vähentää toistoa, jos arvo on laskettu pitkällä ja monimutkaisella
funktiokutsulla.
Se helpottaa myös ohjelman muuttamista: nimetty arvo tarvitsee muuttaa vain kerran,
eikä jokaisessa paikassa, missä sitä käytetään.
Nimeämistä sanotaan määritelmäksi ja
nimettyä arvoa vakioksi.
Nimi annetaan komennolla define
:
(define nimi arvo)
Vakion nimi voi olla lähes mitä tahansa, mutta merkit (, ), [, ], {, }, ”, ‘, `, ,; ,# ,| ,\ ja itse pilkku ovat kiellettyjä. Lisäksi nimi ei saa näyttää numerolta.
Kokeile kirjoittaa DrRacketin yläosaan:
(require 2htdp/image)
(define ympyrät
(overlay (circle 20 "solid" "red")
(circle 30 "solid" "blue")))
Muista
Muista painaa Run
aina sen jälkeen kun teet muutoksia yläosaan!
Muista
Jos et muista miten piirtokomennot toimivat, voit siirtää kursorin funktion nimen päälle
ja painaa F1
. Nettiselaimeen avautuu luettelo funktion nimellä löydetyistä
ohjeista. Klikkaa 2htdp/imagen kohdalla olevaa linkkiä funktion ohjeisiin.
ja alaosaan:
ympyrät
Muista
Määritelmät täytyy kirjoittaa DrRacketin yläosaan, vaikka voitkin käyttää niitä sen jälkeen sekä ylhäällä että alhaalla!
define
ei ole varsinaisesti funktio, sillä se ei palauta mitään
(eli ei anna takaisin mitään, kun taas esimerkiksi (+ 2 2)
tuottaa, eli
palauttaa luvun 4).
Jos siis esimerkiksi määrittelet kuvan, se ei tule näkyviin ennenkuin
kirjoitat sille antamasi nimen (joko alaosaan, tai yläosaan jonka jälkeen täytyy painaa
Run
-nappia) ikäänkuin kirjoittaisit numeroita,
merkkijonoja tai kopioisit kuvia.
Vakioita voi laittaa myös funktioiden argumenteiksi,
aivan kuten arvoja.
Muista
Huomaa, että vakio ei ole funktiokutsu, eli sen ympärille ei tule sulkuja!
Se ei myöskään ole tekstiä, joten sen ympärille ei tule lainausmerkkejä.
Eli jos vakio pekka
olisi määritelty
(define pekka "kissanhiekka")
niin pekka
antaisi sanan “kissanhiekka” ja "pekka"
sanan “pekka”.
Tehtävä
Määrittele vakio, joka on kuva tikkarista.
Määrittele vielä eriniminen vakio erilaisesta tikkarista, ja kokeile molempia nimiä alaosassa.
Esimerkiksi kuvan metsästä voisi tehdä vaikka näin:
(require 2htdp/image)
(define latva
(overlay/align/offset
"middle" "top"
(triangle 20 "solid" "green")
0 10
(triangle 30 "solid" "green")))
latva
(define runko (rectangle 10 10 "solid" "brown"))
runko
(define kuusi
(above latva runko))
kuusi
(define metsä
(beside kuusi kuusi kuusi kuusi kuusi))
metsä
Nyt jos kuusien väriä halutaan muuttaa, tarvitsee muutos tehdä vain vakion määritelmään:
(define latva
(overlay/align/offset
"middle" "top"
(triangle 20 "solid" "darkgreen")
0 10
(triangle 30 "solid" "darkgreen")))
Tehtävä
Piirrä lehtipuu, anna sille nimi (eli määrittele vakio, jonka arvo on kuva lehtipuusta), ja piirrä metsä jossa on sekä kuusia, että lehtipuita.
Mitä vakioita määrittelit ratkaistaksesi tehtävän?
Kiinnostuitko?¶
Kokeile lisätä kuvaan taaemmaksi pienempiä puita, ikäänkuin ne olisivat kauempana. Tai vaikka sinisen taivaan, vuoren, lintuja jne.