Было бы смешно использовать оператор switch для обработки кодов irc-сервера? - PullRequest
1 голос
/ 27 июня 2009

Есть довольно несколько кодов IRC-сервера

Я работаю над небольшим IRC-клиентом для Adobe AIR , и я начал с того, что сначала поддерживал только несколько из них, а затем заявление о переключении не казалось плохой идеей. Но, поскольку я поддерживаю все больше и больше, оператор switch становится длиннее, и кажется, что он немного вышел из-под контроля. Одна проблема заключается в том, что я сохранил код обработки низкого уровня IRC в файле сам по себе, чтобы его можно было использовать повторно. Я хотел бы сохранить все в одном файле. Другая проблема заключается в том, что блоки кода в операторах switch в настоящее время предполагаются как часть этого класса IRC, и этот оператор часто используется. Внесение изменений сейчас будет большой работой и введением регрессий. Единственная проблема на самом деле - мое отвращение к длинному заявлению о переключении, в противном случае вы знаете, что оно работает, и его легко читать, но на самом деле это не усложняет его обслуживание. Но это такое длинное заявление о смене. И функция, которая содержит оператор switch, тоже очевидно длинная. : //

Одна вещь, которую я иногда делаю вместо переключателя, это то, что я определяю функции, которые названы в соответствии со значением, которое оценивает переключатель. Вместо выключателя:

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

Я проверяю, существует ли метод в области видимости, и выполняю его:

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

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

Но, опять же, в этом случае я чувствую, что регрессии имеют высокий риск, и я не уверен, что стоит усилий, чтобы избежать длинного оператора switch ради его длины.

Ответы [ 2 ]

3 голосов
/ 27 июня 2009

Почему бы вам не сохранить хеш (объект JavaScript {}) с кодом в качестве ключа и функцией в качестве значения? Затем для небольших кусков кода вы можете использовать анонимную функцию, а для больших кусков кода вы можете просто иметь ссылку на уже написанную функцию. Я ничего не знаю о IRC, но вот небольшой пример:

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

Какой-то плохой пример, но вы поняли.


Редактировать: Если вы считаете, что можете легко и без проблем поддерживать такое длинное выражение switch, то я думаю, что смешно переписывать вашу программу просто для удаления switch. Но я знаю, что лично я по многим причинам предпочел бы поддерживать хеш-таблицу, как указано выше, чем огромный оператор switch. Так что решать вам. Похоже на риторический вопрос, если вы продолжаете настаивать на том, что единственная причина, по которой вы переписали бы свой код, это избавиться от оператора switch.

1 голос
/ 27 июня 2009

почему бы не сохранить переключатель в файле параметров с предопределенными точками выхода вместе с их аргументами прочитать файл при запуске и сохранить в памяти

...