KURZ: Tvorba vlastních metod

  • Vytisknout

V obou programovacích prostředích nalezneme možnost vytvořit si vlastní metody. Stejně jako se liší způsob programování v NXT-G a RobotC, liší se i postup vytváření metod a způsob jejich použití. Vlastní metody v programování využijeme hlavně v případech, kdy se nám bude v kódu opakovat sekvence stejných příkazů a my bychom je museli neustále znovu zapisovat. Nadefinujeme si proto vlastní metodu, která bude tyto příkazy obsahovat a tu poté budeme používat. 

tvorba vlastních metod či bloků v PROGRAMOVACÍCH PROSTŘEDÍCH

NXT-G

Vytváření vlastních bloků

Programovací prostředí NXT-G se vyznačuje vytvářením programů pomocí bloků. Stejně tak se v něm vytváří i vlastní metody. Než začneme nový blok vytvářet, musíme si vytvořit programový kód, který bude funkci nové metody reprezentovat. Všechny bloky, které budou v metodě obsaženy si poté označíme myší a v horním menu klikneme na položku Edit, ve které zvolíme možnost Make A New My Block.

 

menu

 

Následně se nám otevře nové okno, ve kterém musíme vytvořit popis nově vytvářeného bloku. V horní části, v položce Block Name, vyplníme volitelné jméno bloku. V okně níže si můžeme napsat vlastní popis, abychom později ihned viděli, k čemu blok slouží a nemuseli jeho funkci složitě dohledávat v kódu, který obsahuje. Největší část okna zabírá náhled, ve kterém můžeme vidět všechny bloky, které jsou v nově vznikající metodě obsaženy. Kliknutím na Next se posuneme ve vytváření o krok dále.

 

definovani

 

Posledním krokem vytváření nové metody je vytvoření vzhledu finálního bloku. Ve spodní části se nám zobrazují veškeré dostupné ikony v programovacím prostředí, které si můžeme přetáhnout do bílého okna nahoře a libovolně uspořádat. Současně se nám vpravo nahoře zobrazuje náhled, ve kterém vidíme, jak bude blok vypadat. Jakmile jsme s vytvářením spokojeni, klikneme na tlačítko Finish a nový blok se nám zobrazí na ploše programovacího prostředí. 

 

ikony

 

Vytváření nových metod v programovacím prostředí RobotC slouží hlavně k usnadnění práce. Můžeme si vytvořit jeden blok, ve kterém se vykonává několik po sobě jdoucích příkazů, které se v programu několikrát opakují, a my poté používáme pouze tento jeden blok. Druhou možností využití může být minimalizace kódu. Při vytváření složitějších programů se náš vytvořený kód rozroste do větších rozměrů a můžeme se v něm obtížně orientovat, protože vidíme pouze určitou část v náhledovém okně. Můžeme proto některé úseky kódu vložit do nového bloku a tím zmenšit velikost programu.

RobotC

Vytváření vlastních metod

První možnosti vytvoření vlastní metody v RobotC je definování vlastní funkce. Ta může nebo nemusí vracet nějakou hodnotu. Závisí to návratovém datovém typu, kterého nabývá. Funkci můžeme zapsat nebo si ji přetáhnout z knihovny funkcí umístěné v RobotC vlevo. Je umístěna v sekci _C Constructs.  Její základní konstrukce je následující:

 
void subname(arguments)
{
 body
}
 

Subname uživatel nahradí vlastním názvem funkce. Výraz arguments v závorce vyjadřuje prostor pro deklarování proměnné. Tělo funkce(body) slouží k umístění příkazů. Pokud bychom nechali v deklaraci funkce datový typ void, funkce by nevracela žádný výsledek, pokud bychom zvolili např. některý z číselných datových typů, vracela by nám určitou hodnotu. Vše si ukážeme na příkladu.

Níže můžete vidět jednoduchý příklad funkce bez návratové hodnoty, tedy datového typu void. Definovali jsme si fukci, která po dobu tří vteřin pohání motory směrem vpřed zvolenou rychlostí. Ta se volí jako parametr uvedený v závorce při zavolání funkce v hlavní části programu.

 
void motory(int rychlost)
{
  motor[motorA] = rychlost;
  motor[motorB] = rychlost;
  wait1Msec(3000);
}
 
 
task main()
{
  motory(50);
}
 

Druhý příklad demonstruje použití funkce návratového typu. Návratovým typem je zde datový typ integer. Funkce obsahuje určitý výpočet a jeho výsledek nám vrací příkaz return. Při zavolání v hlavní části programu a zadání patřičného parametru se tak funkce provede a je vrácen výsledek.

 
int vypocet(int a)
{
 a = (a + 2)*17;
 return a;
}
 
task main()
{
 int x = 6;
 int vysledek = vypocet(x);
 nxtDisplayString(1, "x: %d", vysledek);
 wait1Msec(5000);
}
 

Druhou možností, která slouží k uživatelskému definování je dotaz task(). Jedná se o sekvenci zdrojového kódu volanou na určitém místě programu, která nám nevrací žádný výsledek. Jeho základní konstrukce vypadá takto:

 
task taskname()
{
 body
}
 

Jméno dotazu je volitelné a definuje se namísto slova taskname. Do sekce body následně umístíme příkazy, které se mají při zavolání funkce provádět. Volání funkce je následně v hlavní části programu prováděno příkazem StartTask(), v jehož závorce je umístěn název funkce.

Praktické využití můžete znovu vidět na krátkém příkladu. V programu je definován dotaz orientace(), který obsahuje kód ovládající chování robota v prostoru. Ultrazvukový senzor snímá vzdálenost robota k překážce a pokud je vzdálenost nižší než 15 cm, robot se zastaví. V opačném případě pokračuje v jízdě. V hlavní sekci programu poté voláme tento dotaz pomocí příkazu StartTask(orientace).

 
#pragma config(Sensor, S1, utrazvukovy, sensorSONAR)
// Deklarace senzoru
 
task orientace()
{
 int vzdalenost = 0;
 int vykon = 0;
 
   while(true)
   {
     vzdalenost = SensorValue(sensorSONAR);
 
   if(vzdalenost < 15)
   {
     vykon = 0;
     motor[motorB] = vykon;
     motor[motorC] = vykon;
   }
   else
   {
    vykon = 40;
    motor[motorB] = vykon;
    motor[motorC] = vykon;
   }
  }
}
 
task main()
{
 
  StartTask(orientace);
 
}
 

Využití obou možností slouží v programovacím prostředí k usnadnění práce programátora. Funkci si nadefinujeme pouze jednou a poté ji na libovolném místě v programu klidně i opakovaně voláme, aniž bychom ji znovu museli psát. Program tak může být kratší a získá také na přehlednosti.

Toto není ovšem jediná výhoda vytváření vlastních metod. Voláním vlastních nadefinovaných funkcí totiž můžeme využívat paralelní programování. Můžeme totiž vytvořit několik nezávislých programových konstruktů, které se budou nezávisle na sobě vykonávat.

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)