問題タブ [switch-statement]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python のさまざまなスイッチケース置換の選択 - 辞書または if-elif-else?
私は最近、switch-case ステートメントをサポートしている言語で使用しないことを推奨する質問を読みました。Python に関する限り、次のような多くのスイッチ ケースの置換を見てきました。
- 辞書の使用 (多くのバリアント)
- タプルの使用
- 関数デコレーターの使用 ( http://code.activestate.com/recipes/440499/ )
- ポリモーフィズムの使用 (型チェック オブジェクトの代わりに推奨される方法)
- if-elif-else はしごの使用
- 誰かが訪問者パターンを推奨しました(おそらく外因性)
さまざまなオプションがあるため、特定のコードに対して何をすべきかを判断するのに少し苦労しています。一般的に、これらの方法のいずれかを選択する基準を学びたいと思います。また、判断に迷った場合の具体的な対処法(選択肢の説明付き)を教えていただければ幸いです。
ここに特定の問題があります:
(1)
このメソッドは、メニューから曲線を描くことを選択したことに応答して、 qt-slotによって呼び出されます。上記の方法では、アプリケーションが完了すると合計 4 ~ 7 個の曲線が含まれます。この場合、使い捨ての辞書を使用することは正当化されますか? これを行う最も明白な方法は if-elif-else ですが、それを使用する必要がありますか? すべての曲線クラスが **kargs を使用しているため、ここで **kargs を使用することも検討しています (友人の助けを借りて)。
(2)
この 2 番目のコードは、ユーザーが曲線のプロパティを変更したときに呼び出されるqt-slotです。基本的に、スロットは gui (spinBox) からデータを取得し、適切なカーブ クラスのインスタンス変数に入れます。この場合、再び同じ質問があります - dict を使用する必要がありますか?
これが前述のスロットです-
参考までに、上記のスロットに接続するためのコードを次に示します -
注- self.endAngle などはコンストラクタで初期化されます。
私の知る限り、dict を選択する理由は高速検索のためです。それはいつ保証されますか?100件以上の場合は?関数が呼び出されるたびに辞書を作成して破棄し続けるのは良い考えですか? 関数の外でこの目的のために dict を構築する場合、他の場所で必要かどうかを確認する必要がありますか? 他の場所で必要ない場合はどうなりますか?
私の質問は、もしあればベストプラクティスは何ですか? 物事を進めるための最善/最もエレガントな方法は何ですか? さらに別の言い方をすると、if-elif-elseをいつ使用するか、他の各オプションをいつ使用するか?
c# - 2要素の列挙型はこのままだと思いますか?
私が2つのメンバーの列挙型を持っていることはかなり頻繁に起こります:
列挙値に従って i に異なる値を割り当てたいとしましょう。
これを書くべきですか:
またはこれ:
または多分これ:
書くのがずっと速いので、私は通常最初のオプションを選びますが、私はいつもそれについて少し間違っていると感じています. 普段何をしていますか?
コードは c# で投稿しましたが、この質問は言語に関連したものではありません。
どのようにタグ付けすればよいかよくわかりません。必要に応じてタグを付け直してください。
編集:多分私の質問は十分に明確ではありません:私が本当に疑問に思っているのは:私の列挙型が決して変更されず、速い方法で進むと仮定すべきか、それとも変更される可能性があると考えるべきか(私は変更していませんが)まだ)、エラー処理コードを追加して、バグが変更された場合にその場所を追跡するのに何週間も費やさないようにします)
c++ - switch ステートメントを文字列に適用できないのはなぜですか?
次のコードをコンパイルすると、 のエラーが発生しましたtype illegal
。
switch
またはで文字列を使用することはできませんcase
。なんで?文字列をオンにするのと同様のロジックをサポートするためにうまく機能するソリューションはありますか?
c++ - 巨大なスイッチステートメントを何に置き換えますか?
いくつかのテンプレート ファイルを解析するコードがあり、プレースホルダーが見つかると、それを値に置き換えます。何かのようなもの:
コードでは、パーサーがそれらを見つけて、次の関数を呼び出します。
元のプレースホルダーを戻り値に置き換えます。
実際には、これはダミーの Web ページではなく、多数 (50 以上) の異なるプレースホルダーが発生する可能性があります。
私のコードは C++ ですが、この問題はどの言語にも存在すると思います。それは、アルゴリズムと OO 設計に関するものだと思います。唯一の重要なことは、動的/評価済みのコードが必要なかったとしても、これをコンパイルする必要があるということです。
Chain of Responsibility パターンの実装について考えましたが、状況があまり改善されないようです。
更新: また、別のスレッドのこのコメントについても心配しています。私はそれを気にする必要がありますか?
javascript - ネストされたスイッチを回避するには?
Web アプリの JavaScript でコンテキスト メニューを作成しています。メニューはさまざまなコンテキストで表示され、さまざまな選択肢があります。コンテキスト/選択ごとに異なる機能を使用できます。
メニューが構築されているときにそれらをハードコーディングします。私が気に入らないのは、おそらく多くのコードが繰り返されることです。したがって、ディスパッチャー関数の使用を考えていましたが、次のように、ネストされた長い switch ステートメントになる可能性があります。
うん。もっと良い方法があるはずです。たぶん、ディスパッチャは価値があるよりも面倒です。関連する投稿の いくつかを見てきましたが、この正確な状況にそれらを適用する方法がよくわかりません。