Innen: Hungarian Scratch-Wiki
(Saját blokk szócikkből átirányítva)
Ez a szócikk még egy csöppet fordítás alatt áll. Akadhatnak benne más nyelvű szövegek is. |
A Blokkjaim egyike a Scratch tíz blokk-kategóriájának. A kijelölt szereplő által használható eljárásokat (függvények, amelyek nem adnak vissza értéket) tartalmaz. Az ebbe a kategóriába tartozó blokkok rózsaszínek. Amikor még egyetlen saját blokk sincs készítve, üres, a Blokk létrehozása gombot leszámítva.
A Blokk létrehozása gombra kattintva egy párbeszédablak jelenik meg, ahol a felhasználó létrehozhatja az eljárást. Az OK lenyomása után az új blokk megjelenik a blokkpalettán és egy üres meghatározás (definíció) a szkriptterületen (kód rész). Minden alkalommal, amikor az eljárás lefut, a Scratch a neki megfelelő meghatározás blokkhoz kapcsolt blokkokat futtatja.
Meghívás és futtatás
A meghatározás blokk alatti rész akkor fut le, ha a neki megfelelő blokk futtatva van, hasonlóan az üzenetekhez. Az üzenetekkel ellentétben, a meghatározás alatti kód úgy fut le, mintha a meghívásának helyére, vagyis a létrehozott blokk helyére be lenne szúrva.
Ha egy blokkra be van kapcsolva, hogy képernyőfrissítés nélkül fusson, egyetlen képkocka alatt fog lefutni az összes blokk, ami a meghatározás alá van illesztve.
A létrehozott blokkokat bele lehet rakni a saját meghatározásukba, ezt rekurziónak hívják, és rengeteg összetett probléma megoldására alkalmas.
Alkalmazása
A változókon kívül az eljárások is alkalmasak problémák megoldásának vagy feladatok elvégzésének általánosítására. Lehetővé teszik a programozó számára, hogy anélkül írjon meg egy kódot, hogy minden egyes részletet előre tudjon. Ez a fajta absztrakció jellemző például a Scratch beépített menj () lépést blokkjára is, hiszen a fejlesztők nem egy előre meghatározott számú lépést megtevő, pl. menj 50 lépést blokkot adtak a felhasználók kezébe, hanem az akárhány lépés megtevésére képes, előbb említett blokkot.
Az általánosítás könnyen megérthető a bemutatkozásra képes, mutatkozz be [] néven () évesen::custom
blokk példájával. A feladat az, hogy bármi is legyen a neve és kora az illetőnek, az általunk létrehozott blokk által képes legyen bemutatkozni.
A blokkok létrehozása különösen hasznos lehet a toll bővítményt használó projektekben, ahol ugyanazt az alakzatot többször kell megrajzolni. A blokk létrehozásának párbeszédablakában hozzáadható paraméterek lehetővé teszik, hogy alakzatok például különböző nagyságúak vagy színűek legyenek. A blokk létrehozása ablak előhozható a blokkpalettán a blokkra kattintva jobb oldali gombbal is, majd a Szerkesztést választva.
A paraméterek kétfélék lehetnek: szám/szöveg és logikai. A szám vagy szöveg bemenet hasznos lehet például egy kör rajzolásánál a sugár vagy a szín megadására, míg a logikai bemenet megadhatja, hogy a körnek legyen körvonala vagy sem.
Az egyedi blokkok segíthetnek a projekt méretének csökkentésében is, mivel ha egy utasítássorozatot, több egymást követő blokkot, nem csak egyszer szeretnénk használni, viszont kicsit különbözően minden alkalommal, akkor egy blokk készítése lerövidítheti a kódunkat. Így nem kell fölöslegesen ismételni blokkokat és a projekt is átláthatóbb lesz.
Az alábbi kód a fent leírt paraméterekkel véletlenszerű pozíciójú, méretű és színű köröket rajzol a színpadra, kihasználva, hogy a Scratch toll bővítménye kör alakú ecsettel ír, így csak egy vagy két pötty rajzolásával rajzol körvonal nélküli vagy körvonalas kört.
Alkalmazása számításokban
Az egyedi blokkok használhatók olyankor is, amikor egy bonyolultabb műveletet vagy művelet sorozatot többször kell végrehajtani egy projektben.
Ilyen esetekben érdemes egy (eredmény)
változót használni, ami tárolni fogja a végeredményt a blokk lefutása után.
Például hogyha sokszor van szükségünk két pont távolságára, készíthetünk egy távolság blokkot, ami kiszámítja (a Pitagorasz-tétel segítségével) és az eredmény változóban tárolja a távolságot.
távolság (x1) (y1) (x2) (y2) meghatározása [eredmény v] legyen ([gyök v] ((((x1)-(x2))*((x1)-(x2)))+(((y1)-(y2))*((y1)-(y2)))))
Egy másik példa a hatványozás. Ez megoldható rekurzióval:
hatványozás (alap) ^ (kitevő) meghatározása ha <(kitevő)>(0)> akkor hatványozás (alap) ^ ((kitevő)-(1)) [eredmény v] legyen ((eredmény)*(alap)) különben [eredmény v] legyen (1) end
vagy anélkül:
hatványozás (alap) ^ (kitevő) meghatározása [eredmény v] legyen (1) ismételd (kitevő) [eredmény v] legyen ((eredmény)*(alap)) end
Futtatás képernyőfrissítés nélkül
Blokkok képernyőfrissítés nélküli futtatására csak saját blokkok létrehozásával van lehetőség. A képernyőfrissítés az a rendkívül kicsi várakozás, ami egy ciklus blokk minden ismétlésének végén bekövetkezik vagy amikor egy várakozást igénylő blokk van használva.
A blokk készítése ablak felajánlja a képernyőfrissítés nélküli futtatást (alapból ki van kapcsolva). Ezt bekapcsolva elrejthetjük az általunk készített blokk köztes lépéseit, felgyorsíthatjuk a futtatást, és csak a végeredmény fog látszani, ami sok esetben a cél.
Például, ha egy csillagot akarunk kirajzolni a képernyőre, ami mozog fel le, de nem szeretnénk, ha látszata a rajzolás folyamata minden képkockánál, akkor a következő kódot rakhatjuk össze:
Ez a funkció nem ugyanaz mint a turbó mód, mivel az a várakozások idejét csökkenti, de a projekt attól még képernyőfrissítéssel fut.
Helyettesítésük
A legtöbb egyszerű esetben egy blokk létrehozása helyett használhatóak üzenetek vagy változók, például:
when gf clicked broadcast (jump v) and wait when I receive [jump v] repeat (5) change y by (6) end repeat (5) change y by (-6) end
Lecserélésük viszont okozhat abból fakadó hibákat, hogy egy eljárást egyszerre többen is használhatnak, illetve a futtatás képernyőfrissítés nélkül sem helyettesíthető.
Gyakori javaslatok
Sok Scratcher örülne adatközlő egyedi blokkoknak, vagyis olyan blokkoknak, amik értéket adnak vissza. Ez megkönnyítené a programozást az olyan esetekben, amikor egyébként eredmény változóra van szükség.