Page 1 sur 1

[R] Eviter les if-else/switchcase a ralonge avec un tableau

Posté : jeu. 06 nov. 2014 17:23
par Faco
Bonjour à tous,

Le principale est dans le titre.
je fais un script qui s'apparente à un tchat TCP/IP est je l'enrichie de fonctions petit à petit.
Ces fonctions je les ai rangé dans un bon gros IF/ELSE qui n'est fini pas de prendre des lignes ;) .

Code : Tout sélectionner

                                ....
                ElseIf $Data = "#IP#" Then
                ....
        ElseIf $Data = "#CLOSECLIENT#" Then
                ....
        ElseIf $Data = "#INFO#" Then
                ...
 
Je crois me souvenir avoir fait un truc dans le genre en J2EE il y a quelques années où on avais mis en place un tableau (array, pas un dessin :roll: ) avec la commande que l'on recevais (ex ici #IP#) et la fonction à appeler.


C'est loin, flou et confus dans ma mémoire, j'ai besoin d'aide.

Dites moi si c'est pas claire.
Merci :D

Re: [..]Eviter les if-else/switch-case a ralonge avec un tab

Posté : jeu. 06 nov. 2014 17:34
par mikell
C'est pas clair :mrgreen:

Je blague
Eventuellement comme ça

Code : Tout sélectionner

Local $array[$n][2]   ; col0 = commande,  col1 = fonction
For $i = 0 to $n-1
   If $Data = $array[$i][0] Then Call($array[$i][1])
Next
Mais je vois pas bien l'avantage par rapport à un Switch/Case standard

Re: [..] Eviter les if-else/switchcase a ralonge avec un tab

Posté : ven. 07 nov. 2014 00:45
par orax
Le nom de la commande est envoyé à _exec, qui se charge d'exécuter la fonction correspondante (la fonction étant préfixée avec "__cmd_" par exemple). Par contre ce n'est pas avec un tableau comme tu voulais. :?
► Afficher le texte
Édité > Avec la βετα et Map. Ce qui ressemble plus à un tableau d'ailleurs.
► Afficher le texte

Re: [..] Eviter les if-else/switchcase a ralonge avec un tab

Posté : ven. 07 nov. 2014 15:44
par Faco
et ba voila, ça fait déjà bien deux ans que je fais de l'autoit et j' étais pas encore tombé sur la fonction 'Call'. De même, je ne pensais pas pouvoir indicer un tableau avec un chaine de caractère.

Merci a vous deux.

Je pousse un peu plus, si vous savez pas ou que c'est pas possible je passerai quand même le post en résolut.

Re exemple avec mon #IP# :
Mon serveur broadcast à tous le monde qu'il veut leur ip et tous le monde répond "#MYIP#192.168......."

est ce qu'il y aurais un truc facile de genre :

..................................................................................................

En fait je viens de trouver une solution, je l'a dit histoire d'avoir des commentaires si y a plus simple.
Je vais donner une taille de caractères fixe à mes fonction (ex 8 ) et un séparateur ( ex "/|\" ) et faire un truc du genre :
► Afficher le texte
C'est pas aboutit mais c'est l'idée, alors?

Encore merci à vous :)

Re: [..] Eviter les if-else/switchcase a ralonge avec un tab

Posté : ven. 07 nov. 2014 17:12
par Faco
Et question supplémentaire qui ne m’intéresse pas pour le code présent mais mas culture personnel.
On peut faire, comme en C++, plusieurs fois la même fonction avec un nombre de paramètres différent. le programme choisissant la bonne fonction en fonction du nombres de param?

Re: [..] Eviter les if-else/switchcase a ralonge avec un tab

Posté : sam. 08 nov. 2014 00:54
par orax
L'avantage de Call() est qu'il accepte les arguments sous forme d'un array. Donc pas besoin d'utiliser un Switch comme tu l'as fait. Les arguments sont stockés dans $arrayParam et Call() se débrouille avec.
► Afficher le texte
Pour la question, à ma connaissance non, on ne peut pas faire de surcharge de fonctions comme en C++.
Édité > On ne peut pas créer deux fonctions test() et test($a, $b) qui auront chacune un comportement différent mais on peut le simuler. Le code ci-dessous montre des appels de _a() avec différents paramètres. En fonction du nombre de paramètres et/ou de leur type, la fonction peut réagir différemment.
► Afficher le texte

Re: [R] Eviter les if-else/switchcase a ralonge avec un tabl

Posté : sam. 08 nov. 2014 17:13
par Faco
Merci merci :)