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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Faco le sam. 08 nov. 2014 17:12, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#3

Message 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
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

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

#4

Message 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 :)
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

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

#5

Message 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?
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#6

Message 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
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

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

#7

Message par Faco »

Merci merci :)
Répondre