2009-06-27 12 views
1

Es gibt eine ganze a few of IRC server codesWäre es lächerlich, eine Switch-Anweisung zu verwenden, um irc-Servercodes zu behandeln?

ich auf einem kleinen IRC client for Adobe AIR arbeite, und ich begann, indem nur ein paar von diesen zunächst zu unterstützen und dann eine switch-Anweisung schien nicht wie eine schlechte Idee. Aber wie ich mehr und mehr unterstütze, wird die switch-Anweisung länger und es fühlt sich an, als wäre sie ein wenig außer Kontrolle geraten. Ein Problem ist, dass ich den Low-Level-IRC-Code in einer Datei selbst gespeichert habe, damit er wiederverwendet werden kann. Ich möchte alles in einer Datei behalten. Ein weiteres Problem ist, dass Codeblöcke in den switch-Anweisungen derzeit annehmen, dass sie Teil dieser IRC-Klasse sind, und dass diese Anweisung häufig verwendet wird. Änderungen vorzunehmen wäre eine Menge Arbeit und würde Regressionen auslösen. Das einzige Problem ist wirklich meine Abneigung für eine lange Switch-Anweisung, sonst weißt du, dass es funktioniert, und es ist leicht zu lesen, aber nicht wirklich schwieriger zu pflegen. Aber es ist so eine lange Switch-Aussage. Und die Funktion, die die switch-Anweisung enthält, ist natürlich auch lang. : //

Eine Sache, die ich manchmal anstelle eines Schalters mache, ist, dass ich Funktionen definiere, die nach dem Wert benannt werden, den der Schalter bewertet. Anstelle eines Schalters:

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

ich überprüfen, um zu sehen, ob ein Verfahren in Umfang vorhanden ist, und führen Sie es aus:

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

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

Aber auch in diesem Fall, dass ich das Gefühl habe, wie es in Regressionen ein hohes Risiko ist und Ich bin mir nicht sicher, ob es die Mühe wert ist, nur um zu vermeiden, dass es wegen seiner Länge eine lange Switch-Anweisung gibt.

Antwort

3

in Erinnerung behalten in Warum Sie nicht über einen Hash (ein JavaScript {} Objekt halten) mit dem Code als Schlüssel und der Funktion als Wert? Dann könnten Sie für kleine Codeabschnitte eine anonyme Funktion verwenden, und für größere Codeabschnitte könnten Sie einfach einen Verweis auf eine bereits geschriebene Funktion haben. Ich weiß nichts über IRC, aber hier ist ein kleines Beispiel:

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

Art schlechtes Beispiel, aber Sie bekommen die Idee.


Edit: Wenn Sie glauben, dass Sie eine so lange switch Aussage leicht und ohne Probleme aufrechterhalten kann, dann denke ich, es ist lächerlich Ihr Programm neu zu schreiben, nur die switch zu entfernen. Aber ich weiß, dass ich persönlich viel lieber eine Hash-Tabelle wie oben beibehalten würde, als eine riesige switch Erklärung, aus vielen Gründen. Also liegt es an dir. Scheint wie eine rhetorische Frage, wenn Sie darauf bestehen, dass der einzige Grund, warum Sie Ihren Code umschreiben, ist, die switch Erklärung loszuwerden.

+0

Weil Sie dann jedes Mal, wenn Sie eine Instanz dieser IRC-Klasse erstellen, eine ganze Reihe von Funktionen immer wieder deklarieren, nur weil ein Switch vorhanden ist zu lang. Beachten Sie, dass Sie die Funktionen nur einmal für alle Instanzen deklarieren, wenn Sie das Prototypobjekt zum Hinzufügen von Funktionen verwenden. –

+0

Aber meine Frage ist wirklich, sollte ich einen Schalter verwenden. Also ist deine Antwort nein? Ich sollte nicht? Ich sollte eine Neufassung riskieren? –

+0

Ich denke, es wäre einfacher, einige Teile neu zu schreiben, als zu versuchen, persönlich eine riesige Schalteraussage aufrechtzuerhalten. Ich weiß nicht wie es dir geht, aber ich hasse es das zu behaupten. –

1

warum mit vordefinierten Ausstiegspunkten in einer Parameterdatei den Schalter nicht hält zusammen mit ihren Argumenten beim Start die Datei zu lesen und

+0

Sie stimmen also zu, dass Änderungen allein aufgrund der Länge des Switches riskiert werden sollten? –

+0

und die Flexibilität der Wartung Ihres Programms. anstatt den Code jedes Mal zu ändern. ein Benutzer auf mittlerer Ebene kann die Skript-/Konfigurationsdatei ändern und einen Neustart durchführen –