4. Les opérateurs
NWScripts prend en compte divers opérateurs :
a. Opérateurs arithmétiques (et de concaténation) :
+, -, *, /, % : opérateurs d'addition, soustraction, multiplication, division et reste d'une division (Modulo).
Tous ces opérateurs s'appliquent sur les nombres, le '+' (opérateur d'addition) peut s'appliquer sur des chaînes (cet opérateur devient ainsi un opérateur de concaténation).
Par exemple :
int a = 1;
int b = 2;
a = a+b;
a = a-b;
a = a*b;
a = a/b;
a = a%b;
string s1 = "Une ";
string s2 = "Chaîne";
string s3 = s1 + s2 ;
On peut aussi simplifier ces formes par exemple :
a += b ;
a -= b ;
a *= b ;
a /= b ;
a %= b ;
(Note : vous pouvez appeler =, +=, -=, *=, /= et %= des opérateurs d'affectations puisqu'ils vont affecter à une variable une nouvelle valeur)
b. Opérateurs de comparaisons :
Les opérateurs de comparaisons sont très utiles et sont donc très utilisés dans les structures de contrôles. La plupart des opérateurs de comparaisons ne fonctionnent qu'avec des nombres.
== Egalité
!= N'est pas égal
> Supérieur à
>= Supérieur ou égal à
< Inférieur à
<= inférieur ou égal à
Un autre opérateur est l'opérateur ternaire (« ?: ») : nous le verrons plus en détail dans la section sur les structures de contrôle.
Exemples :
Avec :
- s = "chaine" ;
- a = 1, b = 1 et c = 2 (ce sont tous des entiers).
a == a : ceci est vrai. (TRUE)
a != a : ceci est faux. (FALSE)
a > a, a > b : ceci est faux (FALSE)
c > a : ceci est vrai. (TRUE)
a < c : ceci est vrai (c'est équivalent à l'exemple précédent) (TRUE)
a >= b : ceci est vrai. (TRUE)
a <= b : ceci est vrai. (TRUE)
s == "chaîne" : ceci est vrai.
s >= "chaîne" : ceci ne veut rien dire !
c. Opérateurs d'incrémentation :
Ces opérateurs s'appliquent qu'aux entiers même si dans d'autres langages (comme PHP) ils peuvent être utilisés sur des chaînes de caractères. Ils vous permettent d'incrémenter (ajouter 1 à une valeur entière) ou de décrémenter (soustraire 1 à une valeur entière).
--a : Post décrémentation.
a-- : Pré décrémentation
++a : Post incrémentation.
a++ : Pré incrémentation
Vous vous demandez sûrement qu'elle est la différence entre la post et la pré incrémentation : nous vous montrons cette différence par l'exemple :
int a = 1;
a--;
--a;
a++;
++a;
Ceci ne vous dit peut-être rien ? Soit : voici un exemple plus appréhendable :
void main()
{
int a = 1;
FloatingTextStringOnCreature( "a= " + IntToString( a ) +" --a:" + IntToString( --a ), GetFirstPC() );
FloatingTextStringOnCreature( "a= " + IntToString( a ) +" a--:" + IntToString( a-- ), GetFirstPC() );
FloatingTextStringOnCreature( "a= " + IntToString( a ) +" ++a:" + IntToString( ++a ), GetFirstPC() );
FloatingTextStringOnCreature( "a= " + IntToString( a ) +" a++:" + IntToString( a++ ), GetFirstPC() );
}
Si vous placez cet exemple dans un script, par exemple OnHeartBeat (nous verrons dans la section sur les événements qu'il ne faut pas mettre n'importe quoi comme script dans cet événement), ceci affichera successivement :
a=1 --a : 0
a=1 a-- : 1
a=1 ++a : 2
a=1 a++ : 1
Maintenant, vous vous demandez sûrement quel est l'intérêt ? Dans l'utilisation basique qu'on en fait, il n'y a strictement aucun intérêt vu que le plus souvent vous écrirez :
Et a sera incrémentée puis réutilisée (par exemple dans une boucle).
En fait, cela dépend de ce que vous voulez faire de la valeur de a : par exemple, la passer dans une fonction etc !
d. Opérateurs logiques
Les opérateurs logiques sont utilisées dans tout ce qui concerne les conditions.
&& : ET logique.
|| : OU logique.
! : NON logique. (Négation)
Le ET vous permet de lier deux conditions qui devront être VRAIES. (TRUE)
a && b : renvoie VRAI si a = VRAI et b = VRAI.
Le OU vous permet de lier deux conditions, cependant une des deux conditions peut faire défaut :
a || b : renvoie VRAI
- si a = b = VRAI
- si a = VRAI, b = FAUX
- si a = FAUX, b = VRAI
Le NON correspond à la négation d'une condition :
!a : si a est VRAI alors !a renvoie FAUX ; si a est FAUX alors !a renvoie VRAI.
Vous remarquerez que par défaut le OU n'est pas exclusif. Si vous connaissez déjà la programmation, vous connaissez sûrement l'opérateur XOR qui n'est pas présent dans les NWScripts. Voici comment faire pour « simuler » le XOR (OU EXCLUSIF)
Normalement :
a xor b : renvoie VRAI
- si a = VRAI, b = FAUX
- si a = FAUX, b = VRAI
De manière textuelle, qu'est ce que le OU exclusif ?
( ( a OU b ) ET NON ( a ET b ) )
Si vous voulez simuler le OU EXLUSIF vous devrez employer la forme suivante :
( ( a || b ) && !( a && b) )
Note : dans tous nos exemples a et b sont des conditions. Une condition renvoie automatiquement un booléen dépendant du résultat de la condition : si elle est vraie, ou si elle est fausse. Dans beaucoup de langages il existe un type booléen où dans ce cas une condition renverra TRUE (selon le langage, ça sera True, true, etc) si elle est vérifiée ou FALSE si ce n'est pas le cas.
Assurez vous d'avoir bien compris le fonctionnement (et l'utilité) des opérateurs logiques car ils sont quasiment à la base de la programmation.
Afin de finir cette section, nous vous donnons juste un bon avertissement : n'oubliez jamais le type de vos variables, et n'essayez jamais de faire des opérations entre des variables d'un type « a » et des variables d'un type « b ».
Si vous désirez vraiment faire des opérations entre des variables de types différents, vous pouvez utiliser des fonctions de transtypage présentes :
Conversion d'entiers :
IntToFloat (conversion vers un nombre décimal), IntToHexString (représentation en hexadécimal de l'entier sous la forme chaîne de caractères), IntToString (conversion vers une chaîne de caractères).
Conversion de nombres décimaux :
FloatToInt (conversion d'un nombre décimal vers un entier), FloatToString (conversion d'un nombre décimal vers une chaîne de caractères).
Conversion de chaînes de caractères :
StringToInt (conversion vers un entier), StringToFloat (conversion vers un flottant).
Aussi, si nous n'en parlons pas beaucoup : n'oubliez pas de vous servir des parenthèses surtout si vous utilisez des multiplications / divisions:
int i , j = 2;
j = i + j * 2 ;
j = ( i + j ) * 2 ;
Ces mêmes parenthèses vous sont encore plus utiles avec les opérateurs logiques. En définitive : n'hésitez pas à abuser des parenthèses.