問題タブ [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.
c# - このスイッチ/パターン マッチングのアイデアにメリットはありますか?
私は最近 F# に注目しており、すぐに垣根を越えることはありそうにありませんが、C# (またはライブラリのサポート) が生活を楽にするいくつかの分野を明確に示しています。
特に、F# のパターン マッチング機能について考えています。これにより、非常に豊富な構文が可能になり、現在のスイッチ/条件付き C# の等価物よりもはるかに表現力豊かになります。直接的な例を挙げようとはしませんが (私の F# はそれに対応していません)、要するに次のことが可能です。
- 型による照合 (判別共用体のフル カバレッジ チェックを使用) [これは、バインドされた変数の型も推測し、メンバー アクセスなどを与えることに注意してください]
- 述語による一致
- 上記の組み合わせ (および、おそらく私が認識していない他のシナリオ)
最終的に C# がこの豊富な機能の一部を借用できれば素晴らしいと思いますが、その間、私は実行時に何ができるかを調べてきました。
getRentPrice は Func<Vehicle,int> です。
[注 - おそらく、ここでのスイッチ/ケースは間違った用語です...しかし、それはアイデアを示しています]
私にとって、これは、if/else を繰り返し使用する同等の方法や、複合三項条件 (自明ではない式では非常に面倒です - 括弧がたくさんあります) よりもはるかに明確です。また、多くのキャストを回避し、VB の Select...Case "x To y " 利用方法。
上記のような構成要素に大きなメリットがあると人々が考えているかどうかを判断しようとしているだけです (言語サポートがない場合)。
さらに、上記の 3 つのバリエーションで遊んでいることに注意してください。
- 評価用の Func<TSource,TValue> バージョン - 複合三項条件文に相当
- Action<TSource> バージョン - if/else if/else if/else if/else と同等
- Expression<Func<TSource,TValue>> バージョン - 最初のバージョンですが、任意の LINQ プロバイダーで使用できます
さらに、式ベースのバージョンを使用すると、繰り返し呼び出しを使用するのではなく、本質的にすべてのブランチを単一の複合条件付き式にインライン化して、式ツリーの書き換えが可能になります。私は最近チェックしていませんが、初期の Entity Framework ビルドでは、InvocationExpression があまり好きではなかったため、これが必要だったことを思い出すようです。また、デリゲート呼び出しの繰り返しが回避されるため、LINQ-to-Objects をより効率的に使用できます。テストでは、同等の C# と比較して、同じ速度 [実際にはわずかに速い] で実行される (式フォームを使用した) 上記のような一致が示されます。複合条件ステートメント。完全を期すために、Func<...> ベースのバージョンは C# 条件ステートメントの 4 倍の時間がかかりましたが、それでも非常に高速であり、ほとんどのユース ケースで大きなボトルネックになる可能性は低いです。
上記について (または、より豊富な C# 言語サポートの可能性について... 期待しています ;-p) についての考え、意見、批評などを歓迎します。
eclipse - IntelliJIdeaユーザー向けのEclipse
InteilliJ IdeaからEclipseへの切り替えを検討している同僚がいて、Eclipseの一連のコマンドがわからないことを心配しています。
私は疑問に思っていました-Eclipseコマンドを少なくとも一種の一致するアイデアに設定できるキーボードマッピングへのリンクを誰かが持っているでしょうか?
この切り替えをしましたか?知っておくべき「落とし穴」、ヒント、または情報はありますか?
ありがとう!
c# - C#でのswitchステートメントのフォールスルー?
switch
Switchステートメントのフォールスルーは、構成概念を愛する私の個人的な主な理由の1つですif/else if
。例はここにあります:
sは関数の外で宣言する必要があるため、賢い人々はうんざりしています。そうですねstring[]
、これは単なる例です。
コンパイラは次のエラーで失敗します。
なんで?そして、3つを持たずにこの種の動作を取得する方法はありますif
か?
algorithm - ツリーアルゴリズム
私は今日、小さなゲームのアイデアについて考えていて、それを実装する方法に出くわしました。プレイヤーは少しの効果をもたらす一連の動きをすることができますが、特定のシーケンスで行われた場合、より大きな効果をもたらすという考え方です。これまでのところ、これは私が行う方法を知っています。明らかに、私はそれをより複雑にする必要がありました(私たちはそれをより複雑にするのが好きなので)、それで私は、異なるものではありますが、両方がより大きな効果を引き起こすシーケンスの可能なパスが複数ある可能性があると思いました。また、一部のシーケンスは他のシーケンスの始まりである可能性があり、シーケンス全体でさえ他のより大きなシーケンスに含まれている可能性があります。今、私はこれを実装するための最良の方法を確かに知りません。しかし、私にはいくつかのアイデアがありました。
1)循環nリンクリストを実装できます。しかし、移動のリストは決して終わらないので、スタックオーバーフロー™を引き起こす可能性があるのではないかと心配しています。すべてのノードにn個の子があり、コマンドを受信すると、その子の1つに誘導されるか、そのようなコマンドに使用できる子がない場合は、最初に戻る可能性があります。子供が到着すると、いくつかの機能が実行され、小さな効果と大きな効果が発生します。ただし、これにより、ツリー上に多数の重複ノードが発生し、特定の移動で終了する可能性のあるすべてのシーケンスにさまざまな効果で対処できるようになる可能性があります。これは維持するのが面倒かもしれませんが、よくわかりません。理論的にのみ、コードでこれほど複雑なことを試したことはありません。このアルゴリズムは存在し、名前がありますか?それは良い考えですか?
2)ステートマシンを実装できました。次に、リンクリストをさまよっている代わりに、関数を呼び出してそれに応じてマシンの状態を更新する巨大なネストされたスイッチがあります。実装するのは簡単なようですが...まあ...面白くないようです...エレガントでもありません。巨大なスイッチはいつも私には醜いように見えますが、これはもっとうまくいくでしょうか?
3)提案?私は良いですが、私ははるかに経験が浅いです。コーディング分野の良いところは、あなたの問題がどんなに奇妙であっても、誰かが過去にそれを解決したことですが、どこを見ればよいかを知っている必要があります。誰かが私が持っていたものよりも良いアイデアを持っているかもしれません、そして私は本当に提案を聞きたかったです。
coding-style - Switch ステートメントのフォールスルー...許可する必要がありますか?
私が覚えている限り、switch ステートメントのフォールスルーを使用することは避けてきました。実は、switch ステートメントのバグにすぎないということは早い段階で頭に突き刺されていたので、それが可能な方法として意識に入った覚えはありません。しかし、今日、意図的にそれを使用するコードに出くわしたので、コミュニティの誰もが switch ステートメントのフォールスルーについてどう考えているのかすぐに気になりました。
それはプログラミング言語が明示的に許可すべきではないものですか (C# のように、回避策は提供されます)、それともプログラマーの手に委ねるほど強力な言語の機能ですか?
編集: フォールスルーの意味が十分に具体的ではありませんでした。私はこのタイプをよく使います:
とはいえ、こんなのが気になります。
このように、case が 0、1 のときはいつでも、switch ステートメントですべてを実行します。私はこれを設計上見てきましたが、switch ステートメントをこのように使用することに同意するかどうかはわかりません。最初のコード例は非常に便利で安全だと思います。2番目はちょっと危険なようです。
c++ - 大文字と小文字を切り替える
次のコードをアセンブリにコンパイルする方法に違いがあるかどうか疑問に思っていました。switch-case は if else よりも効率的であると聞いたことがありますが、この例では、それが当てはまるかどうかはよくわかりません。
と
makefile - Makefile で「切り替え」を行う良い方法
私は職場で更新されたビルド システムを試しています。現在、ターゲット プラットフォームに応じてコンパイラとフラグを設定する良い方法を見つけようとしています。
私がやりたいことは次のようなものです
これは GNU Make ではサポートされていません。さて、私の最初の考えはただやることでした
これはかなりまともな解決策ですが、ファイル間の違いの概要を把握するのが難しくなります。言うまでもなく、それぞれが一連の変数定義を含む適切な 60 ~ 80 個のファイルを作成して維持することを楽しみにしています。 .
これを達成するためのより良い方法を知っている人はいますか? つまり、別の変数に基づいて一連のフラグやその他のオプションを設定しますか?
sql - 'where' 句の SQL スイッチ/ケース
いろいろと探してみましたが、参考になりそうなものは見つかりませんでした。
私はSQLでこれをやろうとしています:
それぞれの最後に「= @locationID」を付ける必要がないことはわかっていますが、正しい構文にさえ近づくことができません。SQL は、最初の WHEN 行の「=」について不平を言い続けます...
これどうやってするの?
php - PHPでswitchcase'または'を使用する方法
PHPスイッチで「OR」演算子または同等のものを使用する方法はありますか?
たとえば、次のようなものです。
c# - C# の switch ステートメントでの変数宣言
C# の switch ステートメントで、複数のケースで使用される変数に対して、最初のケースでのみ宣言するのはなぜですか?
たとえば、次の例では、「'variable' という名前のローカル変数は、このスコープで既に定義されています」というエラーがスローされます。
ただし、ロジック上、型が の場合、最初の宣言はヒットしないはずですType.B
。switch ステートメント内のすべての変数は単一のスコープに存在し、ロジックが処理される前に作成/割り当てられますか?