Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

"switch(){}" ?

Par Mastokk le 27/12/2002 à 11:09:49 (#2887372)

Dans le post de la taverne animée [GO]Skywalker13 a parlé de la commande switch à la place des if, else, quelqu'un pourrait-il expliquer comment ça fonctionne (si ça fonctionne dans NwN d'ailleurs) et si ça a réellement un intérêt dans NwN ?

Par eMRaistlin le 27/12/2002 à 12:09:25 (#2887820)

Le switch fonctionne dans NvN, et permet de faire une suite de if/then tres facilement. Cela permet de gagner de la place lors de l'ecriture de code repetitif sur une meme variable :



if (nNumber == 1)
{
//Ici tu met ce que tu veux
}
if (nNumber == 2)
{
//Ici tu met ce que tu veux
}
if (nNumber == 3)
{
//Ici tu met ce que tu veux
}
if (nNumber == 4)
{
//Ici tu met ce que tu veux
}
if (nNumber == 5)
{
//Ici tu met ce que tu veux
}

la même chose :

switch (nNumber)
{
case 1:
//ici tu met ce que tu veux
break;
case 2:
//ici tu met ce que tu veux
break;
case 3:
//ici tu met ce que tu veux
break;
case 4:
//ici tu met ce que tu veux
break;
case 5:
//ici tu met ce que tu veux
break;
}


En mettant dans le case la valeur que doit prendre le nNumber pour que l'action soit attendue.

Par Tynril le 27/12/2002 à 14:20:16 (#2888842)

Attention, SWITCH ne fonctionne qu'avec des integers fixes :

switch(nValue) {
case 1: break;
default: break;
}
Exemple avec des constantes préprocessorales (ne fonction pas (encore) en NWScript)
#define MY_CONSTANT_1 1
#define MY_CONSTANT_2 2
#define MY_CONSTANT 3 3
switch(nValue) {
case MY_CONSTANT_1: break;
case MY_CONSTANT_2: break;
case MY_CONSTANT_3: break;
default: break;
}
Contre-exemple qui ne marche PAS:
int nMyConstant1 = 1;
int nMyConstant2 = 2;
int nMyConstant3 = 3;
switch(nValue) {
case nMyConstant1: break;
case nMyConstant2: break;
case nMyConstant3: break;
default: break;
}

Par Jedaï le 27/12/2002 à 16:35:59 (#2889726)

En fait le switch est intéressant car au lieu de faire un grand nombre de test d'égalité, il équivaut à un saut inconditionnel, beaucoup plus rapide (en proportion du nombre de cas :) ). On s'explique donc bien qu'on ne puisse utiliser que des constantes puisque le C (et le NWScript) sont des langages compilés : saut inconditionnel avec variables.... :monstre:

Par ailleurs, point important : ne jamais oublier le "break;" à la fin d'un "case" car sinon l'exécution continue sur le "case" suivant. Ca peut être très pratique mais la plupart du temps c'est une grave erreur ...:D

Par Thognill le 27/12/2002 à 20:06:59 (#2891042)

Edit \

Par Mastokk le 27/12/2002 à 20:09:20 (#2891047)

Oki merci :)

Par [GO]Skywalker13 le 27/12/2002 à 20:50:49 (#2891317)

Arf trop tard.. c'est déjà tout répondu ;-)

Par coolstar le 27/12/2002 à 21:28:14 (#2891512)

:D

Par RAT le 28/12/2002 à 4:11:34 (#2893534)

oui là dessous je trouve cela dommage que leurs switch ne fonctionne qu'avec des integers. Dans d'autres langages, le switch ou select case fonctionne avec tous les types.
que cela soit donc un entier, ou une chaine.

Enfin bon :)

Par [GO]Skywalker13 le 28/12/2002 à 10:23:20 (#2894014)

Attention, tu peux aussi normalement travailler avec les char... le char renvoyant une valeur entière ASCII de son caractère.. Sa permet de faire des switch sur des a,b,c etc..
Et les scripts NWN ressemble fortement à du C..
[la je parle pour le language C et je suppose que c'est pareil ici.. merci de me corriger si je me trompe.]


Pour ce qui est de SELECT CASE.. c'est une grosse connerie de microsoft avec son VB.. Le VB et l'optimisation n'allant pas de paire :-)

Par coolstar le 28/12/2002 à 15:00:01 (#2895408)

Hi!


Et même si ça ne fonction qu'avec des Integers, pourquoi ne pas en ce cas appliquer StringToInt... :D

...

JOL Archives 1.0.1
@ JOL / JeuxOnLine