2009-06-27 1 views
1

Есть довольно a few of IRC server codesБыло бы смешно использовать оператор switch для обработки кодов сервера irc?

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

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

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

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

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

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

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

ответ

3

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

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

Вид плохой пример, но вы получите идею.


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

+0

Потому что тогда вы снова и снова объявляете множество функций каждый раз, когда вы создаете экземпляр этого класса IRC только по той причине, что переключатель слишком долго. Обратите внимание, что, когда вы используете объект-прототип для добавления функций, вы только объявляете функции один раз для всех экземпляров. –

+0

Но мой вопрос действительно, должен, если я должен использовать переключатель. Значит, твой ответ - нет? Я не должен? Я должен рискнуть переписать? –

+0

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

1

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

+0

Итак, вы согласны с тем, что изменения должны быть подвергнуты риску только по причине длины коммутатора? –

+0

и гибкость в поддержании вашей программы. вместо изменения кода каждый раз, когда это требуется. пользователь промежуточного уровня может изменить файл сценария/конфигурации и перезапустить его. –

 Смежные вопросы

  • Нет связанных вопросов^_^