問題タブ [guard-clause]
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# - 同じ条件に対するガード句と例外処理
次のコードスニペットに出くわしました。罪のない人を保護するために名前が変更されました:
私はここでいくつか間違っていることを知っています:
- 例外タイプは個別に処理されていません
- エラーメッセージは十分な情報ではありません
これらについても説明しますが、私の主な質問は、try/catchブロックの直前にあるファイルの存在を確認することです。これは少し冗長だと思います。
例外処理のポイントは、予期しない状態をキャッチすることです。私はファイルがそこにあることを完全に期待しているので、存在チェックを削除し、それが私にとって合理的な解決策ではない場合は、例外処理にそれをキャッチさせます。
どう思いますか?
c# - C# で非常に大きな複合 if ステートメントを書き直すにはどうすればよいですか?
私の C# コードには、無邪気に始まった if ステートメントがあります。
成長しています。現在、20 の句が含まれている必要があると思います。
これをどのように処理すればよいですか?
haskell - 同一の値に一致するパターン
関数型プログラミング言語(Haskell / F#/ Caml)のパターンマッチング機能を使用して、同じ値を複数回照合できるかどうか疑問に思いました。
次の例を考えてみてください。
最初のバリアントは、関数が2つの類似した値(に格納される)で呼び出されたときに呼び出されますa
。
より便利なアプリケーションはこれです(ASTを単純化する)。
しかし、Haskellはこれらのコードを拒否し、定義の競合についてa
警告します-関数が同じ値を取得したかどうかを確認する代わりに、明示的なcase/if-checksを実行する必要があります。照合したい変数が複数回発生することを示すトリックはありますか?
c# - F# の一致式に最も近い C# の同等物は?
私は、多くのクラスがよく知られているが順序付けられていないさまざまなタイプのオブジェクトのコンテナーである状況にいます。たとえば、コンテナーは次のようになります。
o
そのため、タイプの場合はプロパティにA
格納する必要があり、プロパティに入力するなどです。A
B
B
F# では、StoreIfKnown
メソッドは次のように記述できます (構文エラーを許してください。私の F# はあまり良くなく、かなり錆びています)。
しかし、C#では、唯一の方法はかなり冗長であるようです:
テスト/キャストパターンを回避するためにキーワードを使用して実行できますがas
、これはより高速ですが、さらに冗長です。
C#でこれを行うエレガントな方法はありますか?
c# - ガード句のリファクタリング
あなたのクラスでガード条項の爆発を管理する際に、人々は(もしあれば)どのようなアプローチを取りますか?例えば:
私が現在取り組んでいるプロジェクトには、パブリックメソッドに同様のガード句のセットを持つ多くのクラスがあります。
私は.NET4.0コード契約を知っていますが、これは現時点では私たちのチームのオプションではありません。
c++ - vim + c++: ガード句に uuid を挿入する
ファイルのコメント ヘッダーを自動化しようとしています。uuidgen
vimのautocmdを使用して、コマンドの結果をヘッダーに挿入する方法を見つけようとして立ち往生しています。
ヘッダー内には、次のようなプレースホルダー テキストがあります。
_UUID_
.vimrcに入力する autocmd 行は次のとおりです。
問題は r!uuidgen の下に来ています。 shell-command-execution の結果をテキストとして autocmd 行に挿入するにはどうすればよいですか? または、その問題のvi置換コマンドで?
haskell - パターン対ガード: そうでなければ一致しませんか?
次の 2 つの関数は、空の文字列を指定すると動作が異なります。
ここに私の出力:
質問: 'otherwise' クローズが空の文字列をキャッチしないのはなぜですか?
c# - ガード条項が発火しない
そのため、Caliburn.Microとバインドされたテキストボックスで動作するガード句を取得しようとしています。
景色:
ViewModel:
何らかの理由で、テキストボックスに入力し始めた後、guard句が起動しません。これは、発生するはずだと思っていたものです。何か案は?
c# - null以外のガード句を使用してプロパティを自動実装しますか?
自動プロパティはカプセル化を破るので、やや悪であるというMarkSeemanの考えに同意します。しかし、私はそれらがもたらす簡潔な構文、読みやすさ、便利さが好きです。
私は引用します:
コードスニペットの問題は、セレモニーが多すぎることではありません。問題は、カプセル化が壊れることです。実際には
「[…]ゲッターとセッターは、カプセル化や情報隠蔽を実現しません。これらは、言語に合法化された方法であり、それらに違反します。」</ p>
James O. Coplien&GertrudBjørnvig。リーンアーキテクチャ。ワイリー。2010.p。134。
ほとんどの場合、null以外のガード句を追加することは、プロパティセッターにとって十分であり、以下のいずれかよりも優れた方法があるかどうかを知りたいと思います。より良いのは、より簡潔で反復性の少ない方法を意味します。
コードコントラクトの使用:
バニラ.NETの使用:
f# - ガードとのパターンマッチングとF#のif/elseコンストラクト
if/else
MLファミリーの言語では、人々は構築するためにパターンマッチングを好む傾向があります。F#では、パターンマッチング内でガードを使用するif/else
と、多くの場合、簡単に置き換えることができます。
たとえば、単純なdelete1
関数は、以下を使用せずに書き直すことができますif/else
(を参照delete2
)。
別の例は、二次関数を解くことです。
if/else
醜い構成を無視するために、ガードとのパターンマッチングを使用する必要がありますか?
ガードでパターンマッチングを使用することに対するパフォーマンスへの影響はありますか?実行時にパターンマッチングがチェックされているので遅いようです。