arma_3:createurs_de_missions:sqf_for_noobs:fonctions

Ceci est une ancienne révision du document !


Les fonctions

Les programmeurs et les codeurs sont des “flemmards” qui adorent automatiser les taches. Or en programmation il arrive très souvent que l'on fasse des taches très répétitives. Au tout début de l'informatique, l'une des toute première révolution fut la création d'une structure appelée la boucle. Cette dernière permet de répéter des lignes de code un certain nombre de fois à un endroit du code, évitant de devoir les réécrire. Toutefois cette structure ne permet pas de le faire à différent endroit de votre programme.

Ainsi il est apparaît évident le besoin d'une autre structure syntaxique. C'est ainsi que fut né la fonction. Son nom vient tout simplement de l'objet mathématique portant le même nom.
En effet, en mathématique une fonction f prend une ou plusieurs variables x_1, x_2, x_3, etc pour retourner une seule valeur y et l'on appelle avec des parenthèses f(x_1, x_2, x_3, etc). En informatique c'est quasiment pareil, excepté que l'on peut prendre en entré d'autre chose que des nombres (c.f. variables) et idem pour la valeur de sortie.
Ainsi une fonction maSuperbeFonction peut prendre les paramètres monPremierMagnifiqueParamètre, monDeuxièmeMagnifiqueParamètre, etc et retourne maBrillantissimeValeur.

Le principe est donc clair, vous écrivez une seule fois le code de votre fonction en définissant les paramètres attendus ainsi que la valeur retournée. Ensuite il ne vous reste plus qu'appeler là où vous le voulez dans votre code en écrivant maSuperbeFonction(…) (Dans un language bien écrit, hein Bohémia avec ton SQF).

Si vous êtes ici c'est bien parce que vous voulez faire du scripting SQF qui supporte bien heureusement les fonctions. Il vaut mieux pour un langage s'appellant “Status Quo Function”…


En SQF, il y a deux manières de créer une fonction :

  • Les fonctions de fichier, on écrit la fonction dans un fichier SQF séparé avant de la compiler pour pouvoir l'appeler dans nos scripts.
  • Les fonctions en ligne (inline function), désignant les fonctions que vous créez à l'intérieur de votre fichier script.

Deux points positifs sont :

  1. La syntaxe pour les paramètres est identique dans les deux cas ainsi que pour la valeur de retour.
  2. Il suffit de suivre la recette de cuisine pour pas se tromper pour déclarer ces paramètres.

Le point négatif est que le SQF a vraiment une syntaxe de merde pour les fonctions si l'on compare le SQF à celle des langages de programmation répandus, même ancien. Toutefois pas d'inquiétude, c'est abordable.

Une fonction en SQF c'est finalement comme n'importe qu'elle autre variable qui contiendrait du texte ou un nombre, sauf que cette fois-ci elle contient du code. La question qui se soulève est donc, comment je créer une variable de type code en SQF. La réponse est très simple, il suffit d'utiliser des accolades comme suit monCode = {};.
Ici je viens de créer une variable monCode qui contient un code vide (et qui ne fait donc rien).

En SQF, les accolades définissent un objet de type code.

Comment exécuter la fonction ?
Modifions d'abord le contenu de notre fonction qui est pour l'instant vide avec

monCode = {
	systemChat "Hello from monCode";
};

Une solution intuitive pour l'exécuter serait d'écrire la ligne suivante

monCode;

Malheureusement, rien ne se passe. En fait ici, vous appelez simplement le contenu de votre variable, i.e. le contenu de votre code mais il n'est pas exécuté. Pour le faire exécuter, il existe une commande (en réalité 2 mais c'est pour un autre tuto) : call.

call monCode;

Si vous exécutez ces lignes dans la console de débug, vous devez avoir le message dans le chat du jeu.

  • arma_3/createurs_de_missions/sqf_for_noobs/fonctions.1682931429.txt.gz
  • Dernière modification: 2023/05/01 08:57
  • de admin