86 lines
2.8 KiB
Plaintext
86 lines
2.8 KiB
Plaintext
\b;Funkcje
|
|
Używając funkcji można podzielić program na kilka części, z których każda będzie wykonywała określone zadanie.
|
|
Wyobraźmy sobie następujący program¦:
|
|
\c;
|
|
\s;extern void object::Zdalnie( )
|
|
\s;{
|
|
\s; send("order", 1, 100);
|
|
\s; wait(5);
|
|
\s; send("order", 3, 100);
|
|
\s; wait(5);
|
|
\s; send("order", 2, 100);
|
|
\s; wait(5);
|
|
\s; send("order", 4, 100);
|
|
\s; wait(5);
|
|
\s;}
|
|
\n;
|
|
Instrukcje \c;send\n; i \c;wait\n; wykonywane są wielokrotnie. Byłoby dobrze utworzyć funkcję wykonującą te dwie instrukcje:
|
|
\c;
|
|
\s;void object::WyślijDoStacji( float op )
|
|
\s;{
|
|
\s; send("order", op, 100);
|
|
\s; wait(5);
|
|
\s;}
|
|
\s;extern void object::Zdalnie( )
|
|
\s;{
|
|
\s; WyślijDoStacji(1);
|
|
\s; WyślijDoStacji(3);
|
|
\s; WyślijDoStacji(2);
|
|
\s; WyślijDoStacji(4);
|
|
\s;}
|
|
\n;
|
|
Funkcja może mieć parametry¦:
|
|
\c;
|
|
\s;void Przykład( int a, float x, string s )
|
|
\n;
|
|
Funkcja \c;Przykład\n; dostaje jako parametry liczbę całkowitą \c;a\n;, liczbę zmiennoprzecinkową \c;x\n; oraz łańcuch \c;s\n;. Parametry są "przekazywane przez wartość", czyli są kopią wartości określonych jako zmienne podczas wywołania. Przy przekazaniu zmiennej \c;int\n; funkcji, jej parametr jest kopią wartości przekazanej jako argument, wobec czego funkcja może zmieniać wartość parametru bez zmiany wartości w miejscu, z którego była wywołana funkcja.
|
|
|
|
Przy przekazaniu instancji \l;klasy\u cbot\class; lub \l;tablicy\u cbot\array; jako parametru, funkcja otrzymuje jedynie \l;wskaźnik\u cbot\pointer; do instancji lub tablicy. Oznacza to, że w przypadku modyfikacji instancji lub tablicy wewnątrz funkcji, w rzeczywistości zostanie zmodyfikowana instancja lub tablica określona podczas wywołania.
|
|
|
|
Funkcja może również zwrócić wynik przy użyciu instrukcji \c;\l;return\u cbot\return;\n;. Jednakże powinna być wówczas zadeklarowana nie jako void, ale powinna mieć określony typ:
|
|
\c;
|
|
\s;float Średnia( float a, float b )
|
|
\s;{
|
|
\s; return (a+b)/2;
|
|
\s;}
|
|
\s;
|
|
\s;extern void object::Test( )
|
|
\s;{
|
|
\s; float wartość;
|
|
\s; wartość = Średnia(2, 6);
|
|
\s; message( wartość ); // wyświetli liczbę 4
|
|
\s;}
|
|
\n;
|
|
I jeszcze kilka przykładów¦:
|
|
\c;
|
|
\s;float Pi( )
|
|
\s;{
|
|
\s; return 3.1415;
|
|
\s;}
|
|
\s;
|
|
\s;string Znak( float a )
|
|
\s;{
|
|
\s; if ( a > 0 ) return "dodatnia";
|
|
\s; if ( a < 0 ) return "ujemna";
|
|
\s; return "zero";
|
|
\s;}
|
|
\n;
|
|
Można zadeklarować kilka funkcji o tej samej nazwie lecz o różnych parametrach¦:
|
|
\c;
|
|
\s;float Pitagoras( float a, float b )
|
|
\s;{
|
|
\s; return sqrt((a*a)+(b*b));
|
|
\s;}
|
|
\s;
|
|
\s;float Pitagoras( float a, float b, float c )
|
|
\s;{
|
|
\s; return sqrt((a*a)+(b*b)+(c*c));
|
|
\s;}
|
|
\n;
|
|
CBOT wywoła jedną z nich, w zależności od przekazanych parametrów.
|
|
|
|
Można też zadeklarować funkcję \l;publiczną\u cbot\public;, która będzie dostępna dla wszystkich robotów.
|
|
|
|
\t;Zobacz również
|
|
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
|