1

かなりの数の IRC サーバー コードがあります。

私はAdobe AIR用の小さなIRCクライアントに取り組んでいます、最初はこれらのうちのいくつかだけをサポートすることから始めましたが、switch ステートメントは悪い考えではないように思えました。でも、どんどんサポートしていくうちにswitch文が長くなって、ちょっと制御不能な感じがします。1 つの問題は、再利用できるように、低レベルの IRC 処理コードを独自のファイルに保持していたことです。すべてを 1 つのファイルにまとめたいと思います。もう 1 つの問題は、現在、switch ステートメントのコード ブロックがこの IRC クラスの一部であると見なされており、このステートメントが頻繁に使用されていることです。今変更を加えると大変な作業になり、リグレッションが発生します。唯一の問題は、長い switch ステートメントに対する私の嫌悪感です。それ以外の場合は、それが機能し、読みやすいことはわかっていますが、保守が実際に難しくなるわけではありません。しかし、それは非常に長いswitchステートメントです。また、switch ステートメントを含む関数も明らかに長いです。://

スイッチの代わりに私が時々行うことの 1 つは、スイッチが評価する値にちなんで名付けられた関数を定義することです。スイッチの代わりに:

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

メソッドがスコープ内に存在するかどうかを確認して実行します。

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

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

しかし、この場合も、リグレッションのリスクが高いと感じており、長い switch ステートメントを避けるためだけに努力する価値があるかどうかはわかりません。

4

2 に答える 2

3

{}コードをキー、関数を値としたハッシュ(JavaScriptオブジェクト)を保持してみませんか?次に、小さなコードの場合は無名関数を使用でき、大きなコードの場合は、既に作成された関数への参照を持つことができます。私は IRC について何も知りませんが、ここに小さな例を示します。

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

ちょっと悪い例ですが、お分かりいただけたでしょうか。


編集:このような長いステートメントを問題なく簡単に維持できると信じている場合はswitch、プログラムを書き直してswitch. switchしかし、個人的には、多くの理由から、巨大なステートメントよりも上記のようなハッシュ テーブルを維持したいと考えています。だからそれはあなた次第です。switchコードを書き直す唯一の理由はステートメントを削除することだと主張し続けるなら、修辞的な質問のように思えます。

于 2009-06-27T07:23:31.340 に答える
1

定義済みの終了ポイントとその引数を含むパラメーター ファイルにスイッチを保持しない理由 起動時にファイルを読み取り、メモリに保持する

于 2009-06-27T07:16:51.900 に答える