Ehdollisia toimintoja (if
-lauseiden osalta) on jo käytetty
aikaisemmissa kohdissa. Kuvaamme nyt if
-rakennetta tarkemmin ja
esittelemme myös switch
-lauseen, jonka avulla saatetaan
samanaikaisesti tarkastella monia vaihtoehtoja muistipaikan sisällön
suhteen. Ehdollisia toimintoja täydentää vielä goto
-käsky.
Näissä kaikissa esiintyy viittauksia nimettyihin sukro-ohjelman
kohtiin. Viitesanoina saa käyttää sekä kirjaimista että numeroista
koostuvia merkkijonoja. Viitepaikat ovat ohjelman listauksessa aina
kontrollimerkillä +
varustettujen rivien alussa ja tätä paikkaa
koskeva viitesana lopetetaan kaksoispisteeseen (:
) ja välilyöntiin:
Esim. ohjelmanpätkä
21 *{R}Tekstiä jae{goto ABC}
22 *Tämä osa jää väliin.
23 + ABC: ttuna kahteen osaan.
kirjoittaa kenttään "Tekstiä jaettuna kahteen osaan.". Huomaa, että
viitesanan ABC
perässä kaksoispisteen lisäksi yksi välilyönti kuuluu
merkintään ja muu koodi (tässä teksti ttuna
...) jatkuu vasta
seuraavasta merkistä.
Saatavilla on kaksi päämuotoa
- if <ehto> then goto <viite>
- if <ehto> then load <sukro> .
Siis jos <ehto>
on voimassa, joko jatketaan samassa sukrossa kohdasta
<viite>
tai (jälkimmäisessä muodossa) jatketaan toisella sukrolla
aivan kuin olisi annettu käsky {load <sukro>}
. Jos <ehto>
ei ole
voimassa, jatketaan normaalisti sukro-ohjelman seuraavalla
toiminnalla.
W1
,W2
,...
ja vakioita vertaavia yhtälöitä tai epäyhtälöitä. Ehdot ovat joko
numeerisia tai kirjaimellisia (eli merkkijonoja koskevia).
Jälkimmäisessä tapauksessa ehtoa merkitsevä symboli (esim. =
)
kirjoitetaan yläpilkkujen väliin ('='
).
W1
on merkkijono 1.0
. Tällöin
ehto W1 '=' 1.0
on tosi mutta ehto W1 '=' 1
ei ole tosi. Toisaalta
sekä ehto W1 = 1.0
että W1 = 1
ovat tosia, koska numeerisesti
merkkijonot 1.0
ja 1
tarkoittavat samaa lukua.
W1
,W2
,... eivät ole valmiiksi tyypitettyjä
vaan sisältävät aina merkkijonoja, jotka tilanteesta riippuen
tulkitaan joko luvuiksi tai merkkijonoiksi.
=
, <
, <=
, >
, >=
ja <>
ja vastaavasti
yläpilkuin varustettuina merkkijonojen vertaamisessa. Tällöin esim.
W1 '<' W2
tarkoittaa, että W1
:n sisältämä merkkijono on aakkosellisesti
ennen W2
:n sisältämää.
Ehdoissa esiintyvät vakiot kirjoitetaan sellaisenaan.
Merkkijonovakioita ei saa pistää lainausmerkkeihin, elleivät ne kuulu
vakioon. Pelkkä välilyönti merkitään ehdoissa {sp}
ja tyhjä merkkijono
{}
. Jos esim. sukrokutsu edellyttää kolmea parametria,
parametrilistan vaillinaisuus todetaan vaikkapa lauseella
- if W3 '=' {} then goto Puute
Seuraava lajittelusukro näyttää erilaisia vertailutilanteita:
|
|
Mitään yleisiä lajitteluohjelmia ei tietenkään kannata kirjoittaa
pelkällä sukrokielellä. Jos lajittelua tarvitaan, sukro tekee sen
aktivoimalla joko SORT
-komennon, kun tiedot ovat toimituskentässä, tai
FILE SORT
-operaation, kun tiedot ovat havaintotiedostossa.
Teemme sukron, joka laskee komentorivin alla olevien rivien määrään ensimmäiseen tyhjään riviin asti. Sukron tulee huomata myös se tilanne, että tyhjiä rivejä ei ole lainkaan ennen kentän loppua.
|
|
Jos sukro RIVIT1
aktivoidaan tämän listauksen yläpuolella, rivillä
61, samalle riville ilmestyy vastaus
61 */RIVIT1 Rivien lukumäärä on 24.
sillä tässä tapauksessa ensimmäinen tyhjä rivi on 86.
Tällä lauseella saadaan sukro haarautumaan samanaikaisesti useilla
tavoilla annetun muistipaikan sisällön perusteella.
On selvintä näyttää esimerkillä, mistä switch
-lauseessa on
kysymys. Rakennamme sukron VIIKONP
, joka kertoo toimituskentän
seuraavalla rivillä nykyisen viikonpäivän muodossa "Tänään on
sunnuntai.". Toiminta perustuu Survon komentoon TIME
, joka antaa
päiväyksen ja kellonajan yhteydessä viikonpäivän englanninkielisiä
lyhenteitä Sun, Mon, Tue jne. käyttäen.
|
|
switch
-lauseessa, joka on ohjelmassa riveillä 15-23, verrataan
switch
-rivillä mainitun muistipaikan (W1
) sisältöä vuorollaan kuhunkin
case
-rivillä olevaan kaksoispisteeseen päättyvään vakiosanaan. Jos
jokin vaihtoehto täsmää, siirrytään ohjelmassa kohtaan, jonka ao.
case
-rivi määrää goto
-käskyllä. Jos mikään tarjotuista vaihtoehdoista
ei päde, noudatetaan viimeisenä olevan default
-rivin (23) määräystä.
Käsky continue
tarkoittaa aina, että jatketaan suoraan. Tässä
tapauksessa default
-rivin olisi voinut jättää kokonaan pois.
case
-riveillä saa goto
-käskyn asemasta olla joko load <sukro>
-käsky
tai pelkkä continue
.