問題タブ [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.

0 投票する
1 に答える
70 参照

ruby - ガード条項と単一責任原則 (SRP)

現在、素晴らしい本「Practical Object Orientated Design In Ruby」を読んでいて、簡単なカタを使って、その中で説明されている原則のいくつかを実際に実践しています。

次のことを行うメソッドがあります。

これにより、私の DockingStation クラスから「自転車オブジェクトが解放されます」(自転車オブジェクトが引数であることは認識していますが、当面は、メソッドが自転車オブジェクトを削除するのではなく、自転車オブジェクトを返すようにしたいだけです)。

#capacity_empty_error は次のことを行います。

そして #空?次のようになります。

ここで、bike はインスタンス変数 @bike のラッパー メソッドです。#bike が何かに設定されている場合、コードはそれがいっぱいであると想定しているため、DockingStation クラスの現在の容量は 1 です (後で適切な容量を追加する予定です)。

うまくいけば、それが私のコードを説明しています。質問をして、そうでない場合は改善を提案してください。私が尋ねたい質問は次のとおりです。

#release_bike のガード条項は次のように感じます。

capacity_empty_error if empty?

はメソッドの 1 つの責任でありbike、次の行での戻りは 2 番目の責任です。これは明らかに SRP を壊しますが、2 つ目の責任として既存のメソッドに追加する以外にガード句を使用する方法がわかりません。

それはできますか?他の人はどのようにそれを達成しましたか?

0 投票する
4 に答える
5301 参照

f# - 空のシーケンスと一致

私は F# を学んでいて、シーケンスとmatch式の両方をいじり始めました。

私は、次のような HTML を調べて<span>pagingクラスを持つ親の最後の URL を取得する Web スクレイパーを作成しています。

最後の URL を取得しようとする試みは次のとおりです。

ただし、検索しているクラスがページにない場合、問題が発生します。特に、次のメッセージで ArgumentExceptions を取得します。Additional information: The input sequence was empty.

paging私が最初に考えたのは、空のシーケンスに一致し、クラスがページに見つからなかったときに空の文字列を返す別の関数を作成することでした。

私の問題はSeq.Empty、リテラルではなく、パターンで使用できないことです。パターン マッチングを使用するほとんどの例では[]、パターンに空のリストが指定されているため、疑問に思っています: 同様のアプローチを使用して空のシーケンスに一致させるにはどうすればよいでしょうか?

0 投票する
2 に答える
277 参照

list - F# match 関数の引数としての関数

リストとリストのリストを受け取り、リストの新しいリストを返す関数を作成しました。

validate は、タプルされた 2 つの int を返す関数です。例 (1,1)

list は 4 つの int のリストです

SS は 4 つの int を持つリストのリストです

theCode は 4 つの int のリストです

「パターン識別子 'validate' が定義されていません」というエラーが表示されます。

ばかげた質問かもしれませんが、答えはわかりません。

関数を一致式の引数として使用することは許可されていませんか? それとも、ここで起こっているのはまったく別のことですか?

私の知る限りでは、2 つの検証関数は 2 つのタプルされた int を返すため、それを照合できるはずです。

0 投票する
2 に答える
399 参照

f# - 2 つのパターンが `when` 句を共有している場合の不完全なパターン マッチ

F# プログラマーの初心者にとって一般的な驚きは、以下が不完全な一致であるという事実です。

しかし、私は驚くべき状況に遭遇しました。これを示すための小さなサンプル コードを次に示します。

このバージョンのdescribe関数は、パターン マッチが実際には完全であるにもかかわらず、「この式のパターン マッチが不完全です」という警告を生成しました。そのパターン マッチに一致しない可能性のあるツリーはありません。これは、式を含むマッチの特定のブランチを削除することで確認できます。when

このバージョンのは、とツリーdescribeの両方に対して「通常のツリー」文字列を返します。saplingtwoLeafTree

match式に式しか含まれていない場合(とが比較されているwhen最初の例のように)、F# コンパイラが一致が完全かどうかを判断できない可能性があるのは当然です。結局のところ、これら 3 つの分岐のいずれも真ではない比較と等価の「奇妙な」実装を持つ型である可能性があります。xyxy

しかし、私のdescribe関数のような場合、なぜ F# コンパイラはパターンを調べず、「すべてのwhen式が に評価された場合falseでも、完全な一致が存在する」と言って、「不完全なパターン一致」の警告をスキップしないのですか? この警告がここに表示される特定の理由がありますか? それとも、コードが十分に洗練されていないために、F# コンパイラがここで少し単純化され、誤検知の警告を出すだけの場合ですか?

* 実際、標準の .Net 型システムの「通常の」境界を超えることなく、 、、およびがすべてfalse になるような値をxおよびに設定することができます。おまけの質問/パズルとして、とのこれらの値は何ですか? このパズルに答えるのにカスタム型は必要ありません。必要なのは、標準の .Net で提供される型だけです。yx < yx = yx > yxy