\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;.