Programování pro hračičky/Opičky/Lekce 4

Z Wikiverzity
Skočit na navigaci Skočit na vyhledávání
Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
středoškolská
Příslušnost: skupinová

Parametry[editovat]

Pokud jsme si vyzkoušeli použít opičku k některému ze složitějších úkolů uvedených jako příklady v minulé kapitole, pak jsme si možná už uvědomili, jak hloupé může být, když máme pro opičku program například na přinesení sušenky, ale chceme místo sušenky po úplně stejné cestě přinést například svíčku, že pak musíme opičku učit celý nový dlouhý příkaz, místo abychom jí řekli, že má provést totéž, jen místo sušenky se svíčkou.

Naštěstí nemusíme. Opička se umí naučit i příkazy, v nichž se vyskytují neurčité výrazy:

'ájo pozor dones něco znamená jih, vezmi něco, sever, polož něco

Takovýmto zadáním vytvoříme příkaz s parametrem, za který budeme následně moci dosadit cokoliv smysluplného:

'ájo dones sušenku
'ájo dones svíčku
'ájo dones koláč

Příkaz dones tedy nyní můžeme opičce zadávat se jmény různých předmětů, při vykonávání příkazu se pak do jeho jednotlivých kroků tato jména budou dosazovat. Za parametr se však považuje vždy právě jedno slovo, které opičce zadáme bezprostředně po dones. Můžeme sice vyzkoušet i zadání jiná:

'ájo dones
'ájo dones noční košili

ale v obou případech opička u příkazu vezmi něco narazí na chybu. V prvním případě nebude vůbec vědět, co si představit pod něco, takže přeruší vykonávání celého příkazu dones, ve druhém případě se pokusí o vezmi noční, ale protože pravděpodobné žádné noční v místnosti nebude, ohlásí průběžnou chybu a celý příkaz dones sice dokoná, ale vrátí se s prázdnou.

To, že pro opičku je jedním parametrem vždy jedno slovo, může být někdy trochu nepříjemné (například když chceme rozlišit třeba noční košili a otrhanou kostičkovanou košili, kterou jsme našli v bedně se starým oblečením), ale na druhou stranu nám umožňuje snadno pracovat s více parametry. Můžeme totiž právě tak napsat:

'ájo pozor vyměň tohle tamto znamená polož tohle, vezmi tamto, prohlédni si tamto, tvař se jako opička mající tamto

a následně opičce, která drží sušenku a stojí vedle svíčky, zavelet:

'ájo vyměň sušenku svíčku

Načež opička položí sušenku, vezme svíčku, prohlédne si svíčku a bude se tvářit spokojeně jako opička mající svíčku.

Jak to vypadá uvnitř[editovat]

Než si vyzkoušíme používání parametrů v plné šíři jejich možností, bude vhodné si uvědomit, jak s nimi opička v rámci programu zachází. Pokud jsme opičku naučili právě popsaný příkaz vyměň a opička má nasazený obojek, můžeme si na něm přečíst, jak příkaz vypadá v paměti opičky:[1]

vymen <1> <2>: polož <1>, vezmi <2>, prohlédni si <2>, tvař se jako opička mající <2>

Vidíme, že parametry jsou zaznamenány prostě jako první a druhý, resp. <1> a <2>. Pod těmito interními jmény pak vystupují jako proměnné v celém programu. Pro opičku je tedy úplně jedno, jak parametry pojmenujeme ve chvíli, kdy ji učíme nějakému novému příkazu.[2] Kdybychom výše při programování příkazu vyměň místo paramterů tohle a tamto použili jakékoli jiné, třeba:

'ájo pozor vyměň blabla bleble znamená polož blabla, vezmi bleble, prohlédni si bleble, tvař se spokojeně jako opička mající bleble

vypadal by následně příkaz vyměň na obojku úplně stejně. Jakákoli slova, která jsou při programování příkazu vložena mezi pozor a znamená, se interpretují jako parametry a zapíší se čísly, za něž potom opička při vykonávání příkazu dosazuje slova, která jí byla pro výkon příkazu předána. Mohli bychom klidně zadat:

'ájo pozor vyměň sušenku svíčku znamená polož sušenku, vezmi svíčku, prohlédni si svíčku, tvař se spokojeně jako opička mající svíčku

a výsledek by byl týž, tedy slova sušenku a svíčku by neznamenala sušenku a svíčku, ale zase jen orientační označení parametrů, které se následně do paměti opičky zapíší jako <1> a <2>.

Když chápeme, že při práci s parametry jde jen o tuto jednoduchou substituci slov, nepodlehneme tak snadno pokušení mimoděk předpokládat, že opička rozumí slovům, která jí zadáváme, nebo je aspoň dokáže česky skloňovat. Běžná začátečnická chyba je pokusit se naprogramovat třeba něco takovéhoto:

'ájo pozor schovej x y znamená prohlédni si x, dej x do y, prohlédni si y, přikývni uznale

Když takovýto příkaz spustíme s dosazenými parametry, například:

'ájo schovej koláč batoh

pak opička postupně vykonává příkazy prohlédni si koláč, dej koláč do batoh, prohlédni si batoh, přikývni uznale, tedy už ve druhém kroku narazí na chybu. Nepomohlo by ovšem ani zadání druhého parametru ve tvaru batohu, protože pak by se ve třetím kroku opička pokusila vykonat příkaz prohlédni si batohu, který by také vyvolal chybu.

Jednoduchá substituce parametrů má ovšem i své výhody. Díky tomu, že jeden parametr zastupuje vždy jen jedno neměnné slovo bez ohledu na jeho význam, můžeme za parametry dosazovat opravdu libovolná slova, tedy nejen jména herních objektů, ale také třeba příkazy:

'ájo pozor spr xx znamená xx se přátelsky

Kdybychom nyní opičce dali povel spr směj, pak by se přátelsky smála, při spr tvař by se přátelsky tvářila atd.

Herní využití příkazů s parametry[editovat]

Víceméně všechno, co můžeme opičku nechat vykonávat pomocí složených příkazů, se dá zobecnit použitím parametrů. Pokud umíme opičku využít k tomu, aby nám došla pro nějaký konkrétní předmět, můžeme jí napsat nový program, podle kterého nám dojde pro předmět daný parametrem. Pokud umíme opičku naprogramovat tak, aby určitému hráči něco sdělila, pak ji s pomocí parametrů umíme naprogramovat ji i tak, aby to sdělila libovolnému hráči, ba aby se i obsah sdělení měnil podle toho, jaký zadáme parametr. Pokud umíme opičku složeným příkazem bez parametrů poslat odněkud někam, pak si můžeme vyrobit program, do něhož se jako parametry budou vkládat jména složených příkazů, z nichž se poskládá složitá a jedinečná akce, již má opička vykonat.

Při programování složitějších akcí s více variantami můžeme využít i toho, že když opička při provádění programu narazí na chybu, již nezpůsobil samotný program, ale konfigurace okolí, pak pokračuje v provádění složeného příkazu.[3] Můžeme například nechat opičku hledat v okolí nějaký předmět tak, že v každé místnosti, do níž přijde, zkusí tento předmět vzít; pokud se předmět v dané místnosti nenachází, opička si postěžuje nahlášením chyby, ale program provádí dál, tedy dojde nakonec tam, kam měla dojít, a pokud někde cestou předmět ležel, pak jej bude mít. Právě tak můžeme při programování variantních cest využít toho, že když má opička vykonat třeba příkaz sever v místnosti, z níž se na sever jít nedá, tak sice nahlásí chybu, ale program nepřestane vykonávat, tedy pokračuje stejnou posloupností kroků, ovšem z jiné místnosti, než kdyby na sever mohla.

Škála možností využití složených příkazů s parametry je tak široká, že příklady konkrétních programů by spíše hrozily zúžením pohledu, než aby byly skutečnou nápovědou. Pokud Vám scházejí nápady, do čeho všeho byste se mohli pustit, zkuste si splnit níže uvedené úkoly.

Úkoly[editovat]

  • Naprogramujte příkaz, jímž Vám opička z místnosti vzdálené aspoň dva kroky přinese předmět zadaný parametrem.
  • Naprogramujte příkaz, jímž opička začne prozkoumávat hráče zadaného parametrem, a potom ho obšťastní několika citovými výlevy.
  • Naprogramujte příkaz, jemuž předáte jako parametry název předmětu a směr, načež opička vezme daný předmět, odnese jej daným směrem a tam jej položí.
  • Naprogramujte příkaz, jemuž jakožto parametr předáte A nebo B, načež se opička vydá na procházku do okolí po jedné z odlišných tras A nebo B.

Pracovní odkazy[editovat]

Poznámky[editovat]

  1. Čtení příkazů jsme si ukazovali už v minulé kapitole, takže snad i bez připomenutí víme, že příkaz vyměň si přečteme prostě pomocí čti vyměň nebo č vyměň.
  2. Právě tak vidíme, že příkaz vyměň je zaznamenán jako vymen, protože opička ve jménech programovaných příkazů ignoruje diakritiku.
  3. Toho se dá samozřejmě dobře využít i ve složených příkazech bez parametrů.