2009-06-27 6 views
1

Il y a assez a few of IRC server codesSerait-il ridicule d'utiliser une instruction switch pour gérer les codes de serveur irc?

Je travaille sur un petit IRC client for Adobe AIR, et j'ai commencé en soutenant que quelques-unes d'entre elles d'abord, puis une instruction switch ne semble pas être une mauvaise idée. Mais comme je supporte de plus en plus, l'instruction switch s'allonge et on a l'impression que c'est un peu hors de contrôle. Un problème est que j'ai gardé le code de gestion IRC de bas niveau dans un fichier seul afin qu'il puisse être réutilisé. Je voudrais garder tout dans un fichier. Un autre problème est que les blocs de code dans les instructions switch supposent actuellement faire partie de cette classe IRC et que l'utilisation de cette instruction est fréquente. Faire des changements maintenant représenterait beaucoup de travail et introduirait des régressions. Le seul problème est vraiment mon dégoût pour une longue déclaration de commutateur, sinon vous savez que cela fonctionne, et c'est un peu facile à lire, mais pas vraiment le rendant plus difficile à maintenir. Mais c'est une déclaration de changement si longue. Et la fonction qui contient l'instruction switch est évidemment longue aussi. : //

Une chose que je fais parfois au lieu d'un commutateur est que je définis les fonctions qui sont nommées après la valeur évaluée par le commutateur. Au lieu d'un interrupteur:

switch (val) { 
    case: "alert": 
    alert("yo"); 
    break; 
} 

Je vérifie pour voir si une méthode existe dans la portée et l'exécuter:

obj.alert = function () { 
    alert("yo"); 
} 

if (val in obj && isFunction(obj[ val ])) { 
    obj[ val ](); 
} 

Mais encore une fois dans ce cas, je l'ai sens comme il y a un risque élevé dans les régressions et Je ne suis pas sûr que cela en vaille la peine seulement pour éviter d'avoir une longue déclaration de l'interrupteur, par souci de sa longueur.

Répondre

3

Pourquoi gardez-vous pas un hachage (un objet JavaScript {}) avec le code comme clé et la fonction comme valeur? Ensuite, pour les petits morceaux de code, vous pouvez utiliser une fonction anonyme, et pour de plus gros morceaux de code, vous pouvez simplement avoir une référence à une fonction déjà écrite. Je ne sais rien au sujet de l'IRC, mais voici un petit exemple:

var CodeHash = { 
    001: function() { /* Do something... */ }, 
    002: BigImportantObject.someFunction 
} 

Type d'un mauvais exemple, mais vous voyez l'idée.


Edit: Si vous pensez que vous pouvez maintenir une telle déclaration à long switch facilement et sans problèmes, alors je pense qu'il est ridicule de réécrire votre programme juste pour enlever le switch. Mais je sais que, personnellement, je préférerais de beaucoup maintenir une table de hachage comme ci-dessus qu'une énorme déclaration, pour de nombreuses raisons. C'est à vous de répondre. Cela ressemble à une question rhétorique si vous continuez à insister sur le fait que la seule raison pour laquelle vous réécrire votre code est de vous débarrasser de l'instruction switch.

+0

Parce que vous déclarez un tas de fonctions encore et encore chaque fois que vous créez une instance de cette classe IRC pour la seule raison qu'un commutateur est trop long. Notez que lorsque vous utilisez l'objet prototype pour ajouter des fonctions, vous ne déclarez les fonctions qu'une seule fois pour toutes les instances. –

+0

Mais ma question est vraiment, devrait si je devrais utiliser un interrupteur. Donc, votre réponse est non? Je ne devrais pas? Je devrais risquer une réécriture? –

+0

Je pense qu'il serait plus facile de réécrire certaines parties maintenant que d'essayer de maintenir une énorme déclaration de changement, personnellement. Je ne sais pas pour toi mais je détesterais le maintenir. –

1

pourquoi ne pas garder le commutateur dans un fichier de paramètres avec des points de sortie prédéfinis ainsi que leurs arguments lire le fichier au démarrage et garder à la mémoire

+0

Donc, vous êtes d'accord alors que les changements devraient être risqués pour la seule raison de la longueur de l'interrupteur? –

+0

et la flexibilité de maintenir votre programme. au lieu de changer le code chaque fois que nécessaire. un utilisateur de niveau intermédiaire peut changer le script/fichier de configuration et un redémarrage à –

Questions connexes