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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top