Sissejuhatus

Võimalus kasutajal luua oma käsuplokke on versiooni 2.0 üheks olulisemaks täienduseks. Scratchis oli ja on olemas väga kasulik võimalus programmi jagamiseks üksusteks (skriptideks) ja koostöö korraldamiseks nende vahel teadete saatmise ja vastuvõtmise mehhanismi kaudu. Kuid andmevahetuse vahendid olid seni võrdlemisi kesised, piirdudes peamiselt globaalsete muutujate ja loendite kasutamisega.
Nüüd aga saab luua protseduure, mis võimaldavad kasutada andmevahetuseks protseduuride (skriptide) vahel parameetreid ja argumente. See on üldlevinud tehnika andmevahetuse korraldamiseks kõikides nö „suurtes“ keeltes (C, Java, Python, Visual Basic jne). Kahjuks on Scratchis esialgu võimalused üsna tagasihoidlikud, piirdudes üksikväärtuste kasutamisega sisendparameetrite ja –argumentidena. Puudub võimalus väärtuste tagastamiseks protseduurist (so funktsioonide loomine) ja loendite kasutamiseks parameetrite ja argumentidena. Arendajad lubavad lähitulevikus lisada ka need vahendid.
Formaalselt taandub asi nn kasutaja käsuplokkide (sisuliselt kasutaja protseduuride) loomisele. Nende väljanägemine ja kasutamine on analoogiline süsteemi sisseehitatud standardplokkidega. Allpool on toodud kolme standardploki kasutamise näited. Ülemises reas on plokid (käsud) nö originaalkujul. Need esitavad nende poole pöördumise prototüüpe (makette). Igal plokil (käsul) on nimi (siin: liigu, ütle, küsi), väljad argumentide väärtuste sisestamiseks ning selgitused ehk märgendid (sek., -le, x:, y:, sekundit, ja oota), mida muuta ei saa.
pl_1
p2
Alumises reas on samad plokid nö täidetud kujul, nagu neid kasutatakse skriptides. Väljades olevad väärtused kujutavad endast argumente, mida kasutatakse vastava käsu täitmisel. Realisatsioonis (mida siin ei näe) vastab igale käsuplokile protseduur (programm). Selles on vastavad suurused esitatud muutujatega (nende tähistus ei ole meile praegu oluline), mida kasutakse käsu poolt määratud tegevuste kirjeldamiseks. Taolisi muutujaid nimetataksegi parameetriteks (varsti näeme nende kasutamist). Praegu on argumendid esitatud konstantide abil, kuid võib kasutada ka muutujaid või avaldisi. Näiteks on toodud käsu variant
p3,
milles kasutatakse nii konstanti (1.5), muutujat (pikkus) ja avaldist (laius + 50).

Käsuplokide (protseduuride) loomine ja kasutamine

Näide "Jookse, jookse - hüppa"

Vaatame näidet, milles kasutatakse kolme kasutaja käsuploki: tantsi, jookse ja hyppa.
N1
Käsuplopkide tantsi ja hüppa argumentide väljade ees on nn märgendid (selgitavad tähised): mitu, paus, h, p. Käsus jookse märgendeid ei ole, Niimodi võib, kuid see ei ole eriti hea: kasutaja peab mäletama argumentide tähendust ja järjekorda. Käsuploki arvuliste väärtustega argumentide väljades on alguses väärtus 1, tekstväärtusega argumendi korral on väli tühi (praegu selliseid ei ole).
Allolevas klipis on otse laval näidatud peaskript, mis praktiliset koosneb protseduuride poole pöördumiste jadast. Argumendid on esitatud peamiselt erinevate konstantide abil. Mõned on esitatud ka muutujate ja avaldiste abil. Samas on nähtaval üks potseduuridest. Hiireklõps kuvab järgmise protseduuri, neid on kolm: tantsi, jookse ja hüppa. Igale käsuplokile vastab oma protseduur.

 

Klõpsates linki Näita rakendust, saab käivitada rakenduse serveris, näha skripti ja protseduure ning neid ka muuta.

Protseduuri definitsiooni koostamine

Protseduuri ja käsuploki loomine toimub vastava protseduuri defineerimisega. See koosneb päisest ja kehast. Päis sisaldab käsuploki nime (Hyppa) ja parameetreid ning märgendeid . Viimased ei ole kohustuslikud. Päise alusel moodustatakse grupi Lisaplokid alas käsuplokk

pais1
Päise loomine toimub grupi Lisaplokid vahendite abil. Alguses on seal on ainult käsunupp Tee plokk. Kui klõpsata seda nuppu, ilmub boks New Block, milles on tühi ploki alguse makett. Siia saab sisestada päise komponendid: nimi, parameetrid ja märgendid. Klõpsates kolmnurgakest teksti Valikud ees, saab kuvada loendi, mille abil toimub parameetrite ja märgendite kohta käiva info sisestamine ja redigeerimine. Kõrvaloleval pildil on näidatud pooleliolev seis. Toimub käsu tantsi teise parameetri kirjeldamine.

Saab kasutada kolme tüüpi parameetreid: arv-, tekst- ja loogikaparameetrid. Kui klõpsata lisamisnuppu loendi paremas tulbas, lisatakse maketile uus väli. Parameetri puhul on väljas kuvatud parmeetri tüüp ja järjenumber (number1, string1, boolean1). Parameetri nimeks võib jätta ka selle teksti, kuid parem on anda omapoolne nimi, klõpsates välja ja tippides nime. Kui tegemist on märgendiga, kuvatakse tühi väli, kuhu saab sisestada soovitava teksti. Aktiivse välja kohal on ristike, mida klõpsates väli eemaldatakse.
Kui klõpsata boksis New Block nuppu OK, ilmub skripti alasse definitsiooni päis ja käsuplokide alasse käsulokk.

p2

Nüüd võib käsuplokkidest selle alla luua nö peaaegu tavalisel viisil vajaliku skripti. Üheks oluliseks eripäraks on parameetrite lisamine plokkidesse. Parameeter lohistatakse päisest vajalikku kohta plokis, nagu tehakse muutujatega tavalistes skriptides. Päisesse jääb parameeter alles.
  tantsi

Joonistamine: ristkülik ja ring

Kasutaja käsuplokkide kasutamine on joonestamisel üsna otstarbekas. Siin on tüüpiliselt palju erinevaid muutuvaid suurusi: kujundi asukoht, mõõtmed, joone paksus ja värvus jm. Taolisi väärtusi on otstarbekas kasutada parameetrite ja argumentide abil eriliiki skriptides: protseduurides. Näiteks on defineeritud protseduur rist, mis joonistab etteantud kohas ja etteantud mõõtmetega ristküliku.

rist_plokk Protseduuri defineerimisel esitatakse selle päises parameetrite loetelu, mida kasutatake tegevuste kirjeldamisel protseduuri sees. Vt. päist ja kõrvalolevat kommentaari.
Toodud definatsiooni alusel luuakse grupis Lisaplokid taoline käsuplokk
kp_rist
Selle kasutamisel esitatakse väljades argumentide väärtused, näiteks
rist_arg
ring

Käsuplokk ring joonistab ringi. Kasutab käsuploki alg algseadete tegemiseks.
Käsuploki ring parameetrid:
x0, y0 - ringi keskpunkt
r - ringi raadius
jp - joone paksus
jv - joone värv
Parameetrid jp ja jv antakse üle protseduurile alg.

 

Näiteks toodud rakendus, kasutades ülaltoodud protseduure, võimaldab kasutajal joonistada lava erinevates kohtades erinevate mõõtmetege ristkülikuid ja ringe.
Hõlmatud rakenduse aknas saab proovida selle tööd. Kujundi asukoha (x0, y0), suurused (a, b, r) ja joone paksuse (jp) saab määrata vastava liuguriga. Joone värv võetakse juhusliku arvu abil. Käivitamiseks: klahv 1 - ristkülik, 2 - ring. Kujundi asukoha ning joonistamise käivitamise saab määrata ka hiireklõpsuga laval. NB! Kasutage turborežiimi: Shift+Roheline lipp.


Nupp Demo näitab sammhaaval ristküliku joonistamist.
Klõpsates linki Näita rakendust, saate käivita rakenduse serveris ja uurida ja katsetada seda.