colobot-data/help/cbot/R/function.txt

85 lines
3.4 KiB
Plaintext
Raw Normal View History

\b;Функции
С помощью функций программу можно разделить на несколько частей, которые будут выполнять каждая свою работу.
Давайте представим следующую программу¦:
\c;
\s;extern void object::Remote( )
\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;
\c;send\n; и \c;wait\n; повторяются много раз. Поэтому, мы можем сделать функцию, которая заменит их:
\c;
\s;void object::SendToPost( float op )
\s;{
\s; send("order", op, 100);
\s; wait(5);
\s;}
\s;extern void object::Remote( )
\s;{
\s; SendToPost(1);
\s; SendToPost(3);
\s; SendToPost(2);
\s; SendToPost(4);
\s;}
\n;
Функции могут иметь параметры¦:
\c;
\s;void Example( int a, float x, string s )
\n;
Функция \c;Exemple\n; функция получит целое \c;a\n;, число с плавающей точкой \c;x\n; и строку \c;s\n;. Параметры - это ничто иное, как просто копии значений в переменных. Если вы передадите \c;int\n; функции, то ее параметр станет копией этого значения, т.е. функция сможет изменять эту копию незатрагивая оригинал.
Если вы передадите \l;классу\u cbot\class; массив \l;array\u cbot\array; как параметр функции, то функция получит только \l;ссылку\u cbot\pointer; к экземпляру массива. Это означает, что если вы измените массив в функции, то будет модифицирован только экземпляр этой функции.
Функция может возвращать результат с помощью инструкции \c;\l;return\u cbot\return;\n;. Поэтому функции должны быть объявлены только как тип:
\c;
\s;float Mean( float a, float b )
\s;{
\s; return (a+b)/2;
\s;}
\s;
\s;extern void object::Test( )
\s;{
\s; float value;
\s; value = Mean(2, 6);
\s; message( value ); // will display 4
\s;}
\n;
Пример¦:
\c;
\s;float Pi( )
\s;{
\s; return 3.1415;
\s;}
\s;
\s;string Sign( float a )
\s;{
\s; if ( a > 0 ) return "positive";
\s; if ( a < 0 ) return "negative";
\s; return "null";
\s;}
\n;
вы также можете объявить несколько функций с одинаковыми именами, но разными параметрами¦:
\c;
\s;float Pythagoras( float a, float b )
\s;{
\s; return sqrt((a*a)+(b*b));
\s;}
\s;
\s;float Pythagoras( float a, float b, float c )
\s;{
\s; return sqrt((a*a)+(b*b)+(c*c));
\s;}
\n;
CBOT будет вызывать ту или иную функцию так, что вызов будет зависеть отт параметров.
Вы также можете объявить функцию \l;общедоступной\u cbot\public;, так что ее смогут использовать остальне боты.
\t;См. также
\l;Инструкции\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.