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

81 lines
2.2 KiB
Plaintext
Raw Normal View History

2013-10-10 14:10:20 +00:00
\b;Les fonctions
Lorsqu'un programme devient long, il est conseillé de le fragmenter en plusieurs fonctions, qui accompliront chacune une tâche bien précise. Imaginons le programe suivant:
\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;
2013-10-10 14:10:20 +00:00
On constate que les deux instructions \c;send\n; et \c;wait\n; sont répétées plusieurs fois. Il est donc judicieux de créer une fonction \c;SendToPost\n; qui effectue ces deux instructions:
\c;
\s;extern void object::Remote( )
\s;{
\s; SendToPost(1);
\s; SendToPost(3);
\s; SendToPost(2);
\s; SendToPost(4);
\s;}
2013-10-10 14:10:20 +00:00
\s;void object::SendToPost( float op )
\s;{
\s; send("order", op, 100);
\s; wait(5);
\s;}
\n;
2013-10-10 14:10:20 +00:00
Une fonction peut recevoir des données en entrée. Il faut en donner la liste, avec à chaque fois le type de la variable et le nom qui lui est donné:
\c;
2013-10-10 14:10:20 +00:00
\s;void Exemple( int a, float x, string s )
\n;
2013-10-10 14:10:20 +00:00
La fonction \c;Exemple\n; va recevoir un nombre entier \c;a\n;, un nombre réel \c;x\n; et une chaîne \c;s\n;.
Les \l;tableaux\u cbot\array; et les instances de \l;classes\u cbot\class; sont toujours passées par \l;référence\u cbot\pointer;.
2013-10-10 14:10:20 +00:00
Une fonction peut effectuer un calcul et retourner le résultat avec l'instruction \c;\l;return\u cbot\return;\n;:
\c;
2013-10-10 14:10:20 +00:00
\s;float Moyenne( float a, float b )
\s;{
\s; return (a+b)/2;
\s;}
2013-10-10 14:10:20 +00:00
\s;extern void object::Essai( )
\s;{
\s; float value;
2013-10-10 14:10:20 +00:00
\s; value = Moyenne(2, 6);
\s; message( value ); // affiche 4
\s;}
\n;
2013-10-10 14:10:20 +00:00
Voici d'autres exemples de fonctions:
\c;
\s;float Pi( )
\s;{
\s; return 3.1415;
\s;}
\s;
2013-10-10 14:10:20 +00:00
\s;string Signe( float a )
\s;{
2013-10-10 14:10:20 +00:00
\s; if ( a > 0 ) return "positif";
\s; if ( a < 0 ) return "négatif";
\s; return "nul";
\s;}
\n;
2013-10-10 14:10:20 +00:00
Il est autorisé de créer plusieurs fonctions ayant le même nom mais des paramètres différents:
\c;
2013-10-10 14:10:20 +00:00
\s;float Pythagore( float a, float b )
\s;{
\s; return sqrt((a*a)+(b*b));
\s;}
\s;
2013-10-10 14:10:20 +00:00
\s;float Pythagore( float a, float b, float c )
\s;{
\s; return sqrt((a*a)+(b*b)+(c*c));
\s;}
\n;
2013-10-10 14:10:20 +00:00
Lors de l'appel à la fonction, CBOT recherche la fonction dont les paramètres correspondent au mieux.
2013-10-10 14:10:20 +00:00
\t;Voir aussi
\l;Programmation\u cbot;, \l;types\u cbot\type; et \l;catégories\u cbot\category;.