Sarebbe ridicolo usare un'istruzione switch per gestire i codici del server irc?
-
20-08-2019 - |
Domanda
Esistono abbastanza alcuni codici server IRC
Sto lavorando su un piccolo client IRC per Adobe AIR e ho iniziato supportando solo alcuni di questi inizialmente, e poi un'istruzione switch non sembrava una cattiva idea. Ma poiché sostengo sempre di più, l'istruzione switch si allunga e sembra un po 'fuori controllo. Un problema è che ho conservato il codice di gestione IRC di basso livello in un file per consentirne il riutilizzo. Vorrei conservare tutto in un unico file. Un altro problema è che i blocchi di codice nelle istruzioni switch attualmente fanno parte di questa classe IRC e c'è un uso frequente di questa istruzione. Apportare modifiche ora richiederebbe molto lavoro e introdurre regressioni. L'unico problema è davvero il mio disgusto per una lunga istruzione switch, altrimenti sai che funziona, ed è un po 'facile da leggere, ma non rende davvero più difficile da mantenere. Ma è una dichiarazione switch così lunga. E ovviamente anche la funzione che contiene l'istruzione switch è lunga. : //
Una cosa che a volte faccio al posto di uno switch è che definisco funzioni che prendono il nome dal valore che lo switch valuta. Invece di un interruttore:
switch ( val ) {
case: "alert":
alert( "yo" );
break;
}
Controllo per vedere se esiste un metodo nell'ambito ed eseguirlo:
obj.alert = function ( ) {
alert( "yo" );
}
if ( val in obj && isFunction( obj[ val ] ) ) {
obj[ val ]( );
}
Ma anche in questo caso ho la sensazione che ci sia un rischio elevato nelle regressioni e non sono sicuro che valga la pena solo per evitare di avere una dichiarazione di cambio lunga, per il bene della sua lunghezza.
Soluzione
Perché non mantenere un hash (un oggetto JavaScript {}
) con il codice come chiave e la funzione come valore? Quindi, per piccoli pezzi di codice potresti usare una funzione anonima e per pezzi di codice più grandi potresti avere solo un riferimento a una funzione già scritta. Non so nulla di IRC, ma ecco un piccolo esempio:
var CodeHash = {
001: function() { /* Do something... */ },
002: BigImportantObject.someFunction
}
Un cattivo esempio, ma hai avuto l'idea.
Modifica: Se ritieni di poter mantenere un'istruzione switch
così lunga facilmente e senza problemi, penso che sia ridicolo riscrivere il tuo programma solo per rimuovere <=>. Ma so che, personalmente, preferirei piuttosto mantenere una tabella hash come sopra piuttosto che un'enorme istruzione <=>, per molte ragioni. Quindi dipende da te. Sembra una domanda retorica se continui a insistere sul fatto che l'unica ragione per cui riscrivi il tuo codice è sbarazzarti dell'istruzione <=>.
Altri suggerimenti
perché non mantenere l'opzione in un file di parametri con punti di uscita predefiniti insieme ai loro argomenti leggi il file all'avvio e tienilo in memoria