Pourquoi ne pas utiliser 256 dans le tableau de votre chaine.
Depuis longtemps, j’ai pu m’apercevoir que certaines personnes avaient la mauvaise habitude d’utiliser un tableau de 256 de long pour leurs chaines, et souvent, c’est totalement inutile. Je vais donc vous expliquer pourquoi il faut éviter de faire ceci.
Il faut savoir que dans une variable qui contient du texte, à la fin de celui-ci se trouve toujours un /0 que vous ne voyez pas. Ce /0 compte pour un caractère et signifie null.
Pour « hi » par exemple, notre tableau aura une longueur de 3 puisqu’on compte le /0 avec.
Exemple :
new
String[3] = “hi”;
Ce qui donne :
new
String[3] = {“h”, “i”, “/0”};
Ou en ASCII :
new
String[3] = {104, 105, 0};
104 est égal à h et 105 à hi. 0 est égal à /0 donc null.
En PAWN, toutes les variables déclarées sont automatiquement à 0. Ce qui veut dire que quand vous faites :
new
String[256];
Vous faites enfaite :
new
String[256];
for(new i = 0 ; i < 256 ; i++)
String[i] = 0;
Bien sûr, c’est plus optimisé que le code que j’ai montré plus haut, mais ça prend quand même du temps inutile. Et même si ce sont quelques millisecondes, elles s’additionnent à toutes les autres.
De plus, il est totalement inutile d’utiliser autant d’espace car c’est lent. Comme je l’ai dit plus haut, chaque variable est déclaré à 0, plus le tableau est grand, plus ça prend du temps.
Une autre raison, c’est que vous en n’avez pas besoin, petit exemple avec le code qui suit.
stock PommeMangees(playerid, nbrDePommes)
{
new
String[256];
format(String,sizeof(String),"Tu as mangé %d pommes”, nbrDePommes);
return SendClientMessage(playerid, COLOR_GREEN, String);
}
En comptant les caractères de la chaine, on arrive à 24 si le personnage a mangé moins de 10 pommes et en prenant compte du /0.
Même en admettant que le personnage a mangé 1'000'000 de pommes, la chaine n’atteindra jamais une longueur de 256.
Si on calcule combien de bytes ont été utilisés pour rien, on arrive à 928bytes, c’est presque un kilobyte de mémoire utilisée pour rien ! (Pour le calcul : (256-24) * 4 = 928)).
Pour cette chaine je pourrais bien utiliser un tableau de 32 si je sais que ma chaine ne dépasse pas les 32 caractères (nombre de pommes et /0 avec).
Je pourrais donc faire :
stock PommeMangees(playerid, nbrDePommes)
{
new
String[32];
format(String,sizeof(String),"Tu as mangé %d pommes”, nbrDePommes);
return SendClientMessage(playerid, COLOR_GREEN, String);
}
Pour les autres chaines plus longues, sachez que la chatbox en jeu ne peut pas afficher plus de 128 caractères, donc pourquoi utiliser 256 ?
Pareil pour ce que le joueur envoie. Il ne peut pas écrire plus de 128 caractères dans le chat, donc totalement inutile de mettre 256.
Pour les pseudos des joueurs c’est pareil, ils sont moins long que 24 caractères, donc pour définir une variable qui contient un pseudo utiliser un tableau de 24 (NB : Vous pouvez aussi utiliser MAX_PLAYER_NAME qui est égal à 24, je vous conseille d'utiliser MAX_PLAYER_NAME car un simple changement de la define suffit pour changer la valeur de toutes les variables de pseudos).
Il y a cependant des fois où l’on doit utiliser un tableau de 256. Dans le cas d’une requête SQL, dont le tableau peut aller jusqu’à 1024 (les requêtes sont grandes parfois). Et pour lire ou écrire des informations dans un fichier. Ce sont pour ces deux cas où l’utilisation d’un tableau de 256 (ou plus pour les requêtes SQL) est utile.
J’espère que ce tuto vous a plu et aidé à mieux utiliser les tableaux pour vos variables contenant du texte.
Je vous conseille également de voir deux tutos très intéressants
Quelques règles de base pour mieux scripter par
SygLes différents opérateurs par
SimInspiré du tutoriel en englais de Y_Less.Téléchargement en format PDF :
http://rafweb.ch/download-8.htmlSi j'ai fais une erreur sur ce tuto, veuillez me le signaler par message privé ;)
++
R@f