3

私はJSと呼ばれる組み込み言語でコーディングしています。

3つの関数を任意の順序で呼び出せるようにしたい。(ABC、ACB、BAC、BCA、CBA、CAB。)

トリック?この言語にはユーザー定義関数はありません。

条件付きおよびループ構造があります。

私には3つの選択肢があると思います。

  1. 大量のコードを複製します。
  2. プリプロセッサを記述します(これにより、重複するすべてのコードが作成されます)。
  3. 配列を使用して、ループの各パスで呼び出される機能を制御し、3回の反復でループを実行します。

私は#1が嫌いです。重複したコードは厄介です。失敗せずに何かを変更するにはどうすればよいですか?

#2は大丈夫だと思います。少なくとも、ソースに重複したコードはありません。しかし、私の出力コードは私がデバッグするものであり、それから分岐したいかどうか疑問に思います。プラス面として、私は言語に砂糖の束を追加することができました。

私の最善の策は#3だと思います。

他のアイデアはありますか?後藤はありません。機能はありません。既存のプリプロセッサはありません。

#3の面白いところは、それが本質的に悪名高い/スイッチの悪夢であるということです。

4

3 に答える 3

3

おそらくある種のミュータント ステート マシン、つまり:

int CODEWORD=0x123;

while (CODEWORD)
{
    switch(CODEWORD&15)
    {
    case 1:
       /// case 1
       break;
    case 2:
       /// case 2
       break;
    case 3:
       //// case 3
       break;
    }
    CODEWORD=CODEWORD>>4;
}

DRY、プリプロセッサなし、配列なし。for/switch はやややむを得ないようです。

于 2009-07-19T00:50:39.290 に答える
3

独自のプリプロセッサを作成する代わりに、C プリプロセッサを使用できる場合があります。少なくとも、それが実行可能な解決策であるかどうかを試すことができます。

于 2009-07-19T00:51:28.573 に答える
1

技術的に最善の解決策は (コードまたは開発者にアクセスできると仮定して) 本当に必要なことを行うために JS 言語を変更することです。

それができない場合、最善の解決策は、説明していない問題の側面によって異なります。

  1. 「関数」は再帰的ですか?
  2. 関数のパラメータはありますか?
  3. JSで提供されていない他の制御構造が必要ですか(必要になる可能性がありますか)?
  4. 関数の呼び出し順序はランタイム パラメータに依存しますか?
  5. 現在および将来の要件を満たすプリプロセッサ言語を設計および実装するのに十分なスキルと自信がありますか?
  6. プリプロセッサを実装することで、長期的にはあなたや同僚の時間を節約できますか?

5. に対する答えとの十分な答えが「はい」の場合、選択肢 #2 が正しい答えです。そうでなければ...#1または#3のような醜い解決策は、実際にはより良いアイデアかもしれません.

編集: ソース コードにアクセスできず、開発チームがニーズに対応できない場合は、オープンソースの代替手段を探すことを検討してください。

于 2009-07-19T01:10:55.630 に答える