meta données pour cette page
  •  

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
arma:createurs_de_missions:arma_3:tips_en_tout_genre:variables [2026/10/15 23:28] – Restauration de l’ancien wiki (arma:createurs_de_missions:arma_3:tips_en_tout_genre:variables, archive.org) tanin_claudearma:createurs_de_missions:arma_3:tips_en_tout_genre:variables [2026/10/16 00:36] (Version actuelle) – Mention de jeu retirée du titre (rubrique déjà séparée par jeu) tanin_claude
Ligne 3: Ligne 3:
 //“GOD is real, unless declared integer.”// //“GOD is real, unless declared integer.”//
  
-Dans ce document, les abréviations i.e. et e.g. sont utilisées par convénience. I.e. signifie “id est” se traduisant par “c'est-à-dire” et e.g. signifie “exempli gratia” se traduisant par “par exemple”.+Dans ce document, les abréviations i.e. et e.g. sont utilisées par commodité. I.e. signifie “id est” se traduisant par “c'est-à-dire” et e.g. signifie “exempli gratia” se traduisant par “par exemple”.
  
 ===== Introduction ===== ===== Introduction =====
  
-Dans la programmation, une variable est un conteneur. Elle porte un nom et sert à enregistrer un résultat, un message, etc. En SQF, une variable est affectée à une valeur avec le symbole ''%%=%%'', e.g. ''%%my_var = 2;%%''. Ici on affecte la variable de nom ''%%my_var%%'' à la valeur ''%%2%%'', si la variable n'existe pas déjà, le système la déclare (créée) automatiquement. Si dans la console arma je tape ''%%my_var + 1;%%'', elle me retourne la valeur ''%%3%%'' (incroyable, je sais 8-)).+Dans la programmation, une variable est un conteneur. Elle porte un nom et sert à enregistrer un résultat, un message, etc. En SQF, une variable est affectée à une valeur avec le symbole ''%%=%%'', e.g. ''%%my_var = 2;%%''. Ici on affecte la variable de nom ''%%my_var%%'' à la valeur ''%%2%%'', si la variable n'existe pas déjà, le système la déclare (crée) automatiquement. Si dans la console Arma je tape ''%%my_var + 1;%%'', elle me retourne la valeur ''%%3%%'' (incroyable, je sais 8-)).
  
-<note tip>Dans certains language de programmation, la variable doit être déclarée explicitement par l'utilisateur comme Fortran, C, C++, Java, etc. Cela se fait grâce à un mot-clef.</note>+<note tip>Dans certains langages de programmation, la variable doit être déclarée explicitement par l'utilisateur comme Fortran, C, C++, Java, etc. Cela se fait grâce à un mot-clef.</note>
  
-Une variable possède un type, i.e. une indication à votre machine de comment interpréter sa valeur (qui est une suite de 0 et 1 pour votre ordinateur). Dans mon exemple, ma variable ''%%my_var%%'' est de type nombre et cela est déterminé automatiquement par le SQF. C'est ce qui a permit à la machine de faire l'addition ''%%my_var + 1;%%''. Assignons une nouvelle valeur d'un autre type à notre variable, ''%%my_var = “2”;%%''. Nous avons maintenant une chaine de caractère (ou String) qui permet de contenir du texte comme ''%%“Hello world”%%'' (Cela fonctionne aussi avec de simple quote ''%%'Hello world'%%''). Si on essaye d'additionner ''%%“2” + 1;%%'', on obtient une erreur car pour le système on essaye d'additionner un caractère avec un nombre.+Une variable possède un type, i.e. une indication à votre machine de comment interpréter sa valeur (qui est une suite de 0 et 1 pour votre ordinateur). Dans mon exemple, ma variable ''%%my_var%%'' est de type nombre et cela est déterminé automatiquement par le SQF. C'est ce qui a permis à la machine de faire l'addition ''%%my_var + 1;%%''. Assignons une nouvelle valeur d'un autre type à notre variable, ''%%my_var = “2”;%%''. Nous avons maintenant une chaîne de caractères (ou String) qui permet de contenir du texte comme ''%%“Hello world”%%'' (cela fonctionne aussi avec des apostrophes ''%%'Hello world'%%''). Si on essaye d'additionner ''%%“2” + 1;%%'', on obtient une erreur car pour le système on essaye d'additionner un caractère avec un nombre.
  
-<note tip>Remarquons que nous avons pu changer le type de variable en changeant sa valeur. On appelle cela le typage dynamique, i.e. c'est le language qui détermine le type de la variable. C'est le cas en SQF mais aussi dans des language comme Python, Javascript, etc. D'autres ont un typage statique (Fortran, C, etc). Si le deuxième cas semble restrictif il est bien plus facile de détecter les erreurs de typage.</note>+<note tip>Remarquons que nous avons pu changer le type de variable en changeant sa valeur. On appelle cela le typage dynamique, i.e. c'est le langage qui détermine le type de la variable. C'est le cas en SQF mais aussi dans des langages comme Python, JavaScript, etc. D'autres ont un typage statique (Fortran, C, etc.). Si le deuxième cas semble restrictif, il est bien plus facile de détecter les erreurs de typage.</note>
  
-<note warning>Certains documents confondent typage **statique** avec le typage **fort** et le typage **dynamique** avec le typage **faible**. E.g. Python est un language de typage **dynamique et fort**, i.e. on ne peut pas additionner ''%%1 + “1”%%'' car se sont deux types différents. À l'inverse, C possède un typage **statique faible**. Si on fait ''%%1 + “1”%%'', C fait une conversion implicite/interne pour réaliser l'addition (à noter que ''%%“a” + 1%%'' vous retournera une erreur).</note>+<note warning>Certains documents confondent typage **statique** avec le typage **fort** et le typage **dynamique** avec le typage **faible**. E.g. Python est un langage de typage **dynamique et fort**, i.e. on ne peut pas additionner ''%%1 + “1”%%'' car ce sont deux types différents. À l'inverse, C possède un typage **statique faible**. Si on fait ''%%1 + “1”%%'', C fait une conversion implicite/interne pour réaliser l'addition (à noter que ''%%“a” + 1%%'' vous retournera une erreur).</note>
  
 ===== Types basiques ===== ===== Types basiques =====
  
-Ces types de variables sont communs à la majorité des langages de programmation (excepté le type nombre qui est un cas particulier), il désigne donc des concepts simples.+Ces types de variables sont communs à la majorité des langages de programmation (excepté le type nombre qui est un cas particulier), ils désignent donc des concepts simples.
  
 ==== Number ==== ==== Number ====
  
-Les variables de type Number sont fait pour contenir des… nombres !+Les variables de type Number sont faites pour contenir des… nombres !
  
-Les opérateurs comme l'addition +, la soustraction -, la multiplication *, la division /, la puissance ^, se comportent comme en math, on peut utiliser des parenthèses pour changer l'ordre de ces opérations.+Les opérateurs comme l'addition +, la soustraction -, la multiplication *, la division /, la puissance ^, se comportent comme en maths ; on peut utiliser des parenthèses pour changer l'ordre de ces opérations.
  
-<note warning>Si vous vous souvenez j'ai dit que le type nombre est un **cas particulier** ne retrouvant pas dans tous les langages. +<note warning>Si vous vous souvenez, j'ai dit que le type nombre est un **cas particulier** qu'on ne retrouve pas dans tous les langages. 
-Cela est du au fait que dans la plupart des langages de programmation on fait la différence entre entiers et les nombres réels. La raison est simplement technique : un nombre entier peut toujours être représenté de manière exacte (avec suffisamment de mémoire). C'est très rarement le cas pour les nombres réels, pensez à PI ou simplement la division 1/3 (nombres infinis après la virgule). La mémoire de notre ordinateur étant limité, on est obligé de tronquer la valeur du réel jusqu'à une certaine précision. On a donc souvent un type **int** (pour integer) et **float** (pour virgule flottante, une représentation des nombres réels) dans d'autres langages.+Cela est dû au fait que dans la plupart des langages de programmation, on fait la différence entre les entiers et les nombres réels. La raison est simplement technique : un nombre entier peut toujours être représenté de manière exacte (avec suffisamment de mémoire). C'est très rarement le cas pour les nombres réels, pensez à PI ou simplement la division 1/3 (nombres infinis après la virgule). La mémoire de notre ordinateur étant limitée, on est obligé de tronquer la valeur du réel jusqu'à une certaine précision. On a donc souvent un type **int** (pour integer) et **float** (pour virgule flottante, une représentation des nombres réels) dans d'autres langages.
  
-Pourquoi je vous parle de cela ? Simplement que quand vous comparez deux nombres réels n'utilisez jamais l'égalité ''%%==%%'' car la représentation d'un nombre réel est très rarement exacte (et votre égalité peut ne jamais être vraie).</note>+Pourquoi je vous parle de cela ? Simplement parce que, quand vous comparez deux nombres réels, il ne faut jamais utiliser l'égalité ''%%==%%'' car la représentation d'un nombre réel est très rarement exacte (et votre égalité peut ne jamais être vraie).</note>
  
 ==== String ==== ==== String ====
  
-En français, la chaîne de caractère. Ce type permet de contenir du texte et sert à l'affichage de message que se soit dans la console, le chat, le log, etc, e.g. ''%%“Hello world!”%%''. On reconnait ce type car le texte est encadré par des apostrophes ou guillemets ''%%'a'%%'' ou ''%%a“”%%'' (single ou double quotes en anglais). L'utilisation des guillemets permettant l'utilisation d'aspostrophe sans casser la chaine de caractère dans le message e.g. ''%%“Tanin, l'carnard boiteux”%%''.\\+En français, la chaîne de caractères. Ce type permet de contenir du texte et sert à l'affichage de messages, que ce soit dans la console, le chat, le log, etc., e.g. ''%%“Hello world!”%%''. On reconnaît ce type car le texte est encadré par des apostrophes ou guillemets ''%%'a'%%'' ou ''%%a“”%%'' (single ou double quotes en anglais). L'utilisation des guillemets permet d'utiliser des apostrophes sans casser la chaîne de caractères dans le message e.g. ''%%“Tanin, l'canard boiteux”%%''.\\
 Votre message peut être vide ''%%“”%%''. Votre message peut être vide ''%%“”%%''.
  
 ==== Boolean ==== ==== Boolean ====
  
-Le type booléen, dont son nom est une référence à George Boole (mathématicien), est une variable possédant la valeur **vraie** ou **faux**. Vous allez utiliser énormément se type de variable dans la structure de votre programme. Prenons un exemple simple :+Le type booléen, dont le nom est une référence à George Boole (mathématicien), est une variable possédant la valeur **vrai** ou **faux**. Vous allez énormément utiliser ce type de variable dans la structure de votre programme. Prenons un exemple simple :
  
-Je compare 2 nombres et j'assigne le résultat à une variable : ''%%my_var = 20 < 40;%%''. La réponse de cette comparaison est évidente, 20 étant inférieur à 40. Notre comparaison retourne donc la **true** (vrai en anglais) et notre conteneur ''%%my_var%%'' est une variable de type bool (booleen) contenant cette valeur. Si on tape l'inverse ''%%my_var = 20 > 40;%%''. Cette fois-ci notre valeur est **false** (faux en anglais).+Je compare 2 nombres et j'assigne le résultat à une variable : ''%%my_var = 20 < 40;%%''. La réponse de cette comparaison est évidente, 20 étant inférieur à 40. Notre comparaison retourne donc **true** (vrai en anglais) et notre conteneur ''%%my_var%%'' est une variable de type bool (booléen) contenant cette valeur. Si on tape l'inverse ''%%my_var = 20 > 40;%%''. Cette fois-ci notre valeur est **false** (faux en anglais).
  
 Ce type est très utile pour contrôler le flux de votre programme (conditions et boucles). Ce type est très utile pour contrôler le flux de votre programme (conditions et boucles).
Ligne 47: Ligne 47:
 ===== Itérables ===== ===== Itérables =====
  
-Le mot itérable veut simplement dire que l'on va pouvoir parcourir le contenu de cette variable, i.e. on **itère** dessus. De manière générale une variable itérable est une collection de valeur.+Le mot itérable veut simplement dire que l'on va pouvoir parcourir le contenu de cette variable, i.e. on **itère** dessus. De manière générale une variable itérable est une collection de valeurs.
  
 ==== Array ==== ==== Array ====
  
-Un array (tableau en français) est une collection **ordonnée** de valeur, i.e. que les valeurs sont toujours rangés dans le même ordre (sauf si le programmeur décide de changer l'ordre explicitement). Les valeurs à l'intérieur d'un array sont de n'importe quelle type (des nombres, strings, bool,… Et même d'autres arrays).+Un array (tableau en français) est une collection **ordonnée** de valeurs, i.e. que les valeurs sont toujours rangées dans le même ordre (sauf si le programmeur décide de changer l'ordre explicitement). Les valeurs à l'intérieur d'un array sont de n'importe quel type (des nombres, strings, bool,… Et même d'autres arrays).
  
 Voyons un exemple : ''%%my_array = [0, 1, “deux”, “3”, []];%%''.\\ Voyons un exemple : ''%%my_array = [0, 1, “deux”, “3”, []];%%''.\\
Ligne 60: Ligne 60:
 ==== Hashmap ==== ==== Hashmap ====
  
-Un Hashmap est une structure de données dont le fonctionnement est similaire à un dictionnaire. Quand vous cherchez une définition dans un dictionnaire vous cherchez le **mot-clef** correspondant (ordonné alphabétiquement) dedans.\\ +Un Hashmap est une structure de données dont le fonctionnement est similaire à un dictionnaire. Quand vous cherchez une définition dans un dictionnaire, vous cherchez le **mot-clef** correspondant (ordonné alphabétiquement) dedans.\\ 
-Dans un Hashmap chaque valeur que vous rentrez est lié à une **clef** définie par vous, les éléments sont donc des paires **key/value** et si vous l'avez compris, vous accéder à une valeur en appelant la clef au lieu d'un indice comme dans un array.+Dans un Hashmap, chaque valeur que vous entrez est liée à une **clef** définie par vous, les éléments sont donc des paires **key/value** et si vous l'avez compris, vous accédez à une valeur en appelant la clef au lieu d'un indice comme dans un array.
  
 En SQF, il faut utiliser soit les commandes [[https://community.bistudio.com/wiki?title=createHashMap&oldid=308959|createHashMap]] ou [[https://community.bistudio.com/wiki?title=createHashMapFromArray&oldid=308958|createHashMapFromArray]] pour créer votre Hashmap.\\ En SQF, il faut utiliser soit les commandes [[https://community.bistudio.com/wiki?title=createHashMap&oldid=308959|createHashMap]] ou [[https://community.bistudio.com/wiki?title=createHashMapFromArray&oldid=308958|createHashMapFromArray]] pour créer votre Hashmap.\\
Ligne 68: Ligne 68:
 === Pour aller plus loin === === Pour aller plus loin ===
  
-Fondamentalement un array et un Hashmap ont le même objectif, stocker d'autres variables/éléments. Néanmoins ils ne sont pas seulement différents en apparence mais également en terme de performances selon la tache, ainsi le choix d'utiliser l'une de ces structure est motivé par son utilisation.\\ +Fondamentalement, un array et un Hashmap ont le même objectif, stocker d'autres variables/éléments. Néanmoins, ils ne sont pas seulement différents en apparence mais également en termes de performances selon la tâche ; ainsi le choix d'utiliser l'une de ces structures est motivé par son utilisation.\\ 
-E.g. un array est plus performant pour toutes opérations concernant l'ensemble des éléments, parcourir un array par une boucle étant plus rapide que pour un hashmap de même nombre d'éléments où l'on accède à chaque élément par la clef. À l'inverse, le temps d'accès à la valeur d'un seul élément pour un hashmap est constant quelque soit sa taille (grâce à l'utilisation d'une clef permettant d'accéder directement à la mémoire) tandis que ce dernier grandit en fonction du nombre d'éléments pour un array (le programme parcourt tous le tableau pour trouver le bon éléments.+E.g. un array est plus performant pour toutes les opérations concernant l'ensemble des éléments, parcourir un array par une boucle étant plus rapide que pour un hashmap de même nombre d'éléments où l'on accède à chaque élément par la clef. À l'inverse, le temps d'accès à la valeur d'un seul élément pour un hashmap est constant quelle que soit sa taille (grâce à l'utilisation d'une clef permettant d'accéder directement à la mémoire) tandis que ce dernier grandit en fonction du nombre d'éléments pour un array (le programme parcourt tout le tableau pour trouver le bon élément).
  
 ===== Types spécifiques du SQF ===== ===== Types spécifiques du SQF =====
Ligne 83: Ligne 83:
 ===== Portée des variables ===== ===== Portée des variables =====
  
-Arma 3 est un jeu multijoueur, la gestion des variables peut être assez complexe. Mais avec un peu d'explication on peut gérer la plupart des cas facilement.+Arma 3 est un jeu multijoueur, la gestion des variables peut être assez complexe. Mais avec un peu d'explications, on peut gérer la plupart des cas facilement.
  
-Une variable peut être **privé** ou **global**. Public voulant dire que tous les scripts pourront utiliser cette variable, alors que privé seul le script courant pourra l'utiliser.+Une variable peut être **privée** ou **globale**. Globale voulant dire que tous les scripts pourront utiliser cette variable, alors que privée, seul le script courant pourra l'utiliser.
  
 <code> <code>
Ligne 92: Ligne 92:
 </code> </code>
  
-Une variable peut être **local** ou **public**. Dans le cas du global, la variable sera propagé aux autres clients et au serveur, dans le cas du local, seul le client (ou le serveur) aura cette variable avec sa valeur.+Une variable peut être **locale** ou **publique**. Dans le cas d'une variable publique, la variable sera propagée aux autres clients et au serveur, dans le cas d'une variable locale, seul le client (ou le serveur) aura cette variable avec sa valeur.
  
 Pour passer une variable en public, il y a plusieurs solutions équivalentes. Pour passer une variable en public, il y a plusieurs solutions équivalentes.