問題タブ [least-astonishment]
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.
date - 存在しない日付の定期的な日付
一定時間ごとに何かを繰り返すオプションを与えるとき、間隔ごとに繰り返されない時間をどのように扱うべきですか?
たとえば、2 月 29 日の誕生日リマインダーはどうなるでしょうか。または、31 日に毎月の予定がある場合、31 日がない月はどうすればよいですか?
合理的なユーザーが期待し、最も驚かないものは何だと思いますか?
python - 「最小の驚き」と変更可能なデフォルト引数
十分長い間 Python をいじっている人は誰でも、次の問題に悩まされています (またはバラバラに引き裂かれています)。
Python の初心者は、この関数が常に 1 つの要素のみを含むリストを返すことを期待するでしょう: [5]
. その代わりに、結果は非常に異なっており、非常に驚くべきものです (初心者にとって):
私のマネージャーはかつてこの機能に初めて遭遇し、言語の「劇的な設計上の欠陥」と呼んでいました。私は、この動作には根本的な説明があると答えました。内部構造を理解していないと、非常に不可解で予想外です。ただし、次の質問に (自分自身で) 答えることができませんでした: 関数の実行時ではなく、関数の定義時に既定の引数をバインドする理由は何ですか? 経験豊富な動作が実際に使用できるとは思えません (バグを繁殖させることなく、C で静的変数を実際に使用したのは誰ですか?)
編集:
Baczek は興味深い例を示しました。あなたのコメントのほとんどと特にウタールのコメントとともに、私はさらに詳しく説明しました。
私には、設計上の決定は、パラメーターのスコープをどこに配置するかに関連しているように見えます: 関数内、またはそれと「一緒に」?
関数内でバインドを行うx
と、関数が呼び出されたときに指定されたデフォルトに効果的にバインドされ、定義されていないことを意味します。これは、深刻な欠陥をもたらすものです:def
行は、バインドの一部 (の関数オブジェクト) は定義時に発生し、一部 (デフォルト パラメーターの割り当て) は関数呼び出し時に発生します。
実際の動作はより一貫しています。その行が実行されるとき、つまり関数定義時に、その行のすべてが評価されます。
.net - FieldInfo.SetValueを使用してValueTypeをnullに設定するべきではありませんか?
(PropertyInfo SetValueおよびnullに関連)
フィールドを指す、、、およびaがpublic class Thing { public int X; }
ある場合、なぜ呼び出すことが合法ですか?ランタイムはフィールドをゼロに設定します。つまり、aをに設定できないと文句を言う代わりに。Thing o
FieldInfo fi
X
fi.SetValue(o, null)
X
default(int)
ValueType
null
この動作の背後にある設計上の選択を知っている人はいますか?少なくともC#からは、驚き最小の原則に違反していますか?
python - Python の「ブール」演算 (例: and/or 演算子)
このメソッドは、単語文字の最初のグループ (つまり: ) を検索し、[a-zA-Z0-9_]
最初に一致したグループを返すかNone
、失敗した場合に返します。
同じ関数を次のように書き換えることができます。
これは同じように機能し、文書化された動作です。このページには次のように明確に記載されています。
式
x and y
は最初に評価されx
ます。が false の場合x
、その値が返されます。それ以外の場合y
は評価され、結果の値が返されます。
ただし、ブール演算子であるため(マニュアルにもそう記載されています)、and
ブール値を返すことを期待していました。その結果、これが(どのように)機能するかを知ったとき 、私は驚きました。
これの他のユースケースは何ですか、および/またはこのかなり非直感的な実装の理論的根拠は何ですか?
ruby - 奇妙なRubyの振る舞い
変数が配列であるかどうかを確認する必要があります。そうでない場合は、さらに処理を進める前に、変数を配列に変換する必要があります。したがって、私のコードは次のようになります。
私はルビーにまったく慣れていないので、おそらくこれはあまり慣用的ではありませんが、私にはこのコードは少なくとも機能するはずです。代わりに、2回目にargs
変数を出力すると、です[nil]
。メソッドをeval
少し変更すると、次のことに注意してください。
すべてが期待どおりに機能します。それで、私が理解できないStructクラスに非常に固有の何かがありますか、それともここで何か怪しいことが起こっていますか?(macosxでruby 1.9.3-devを使用し、rvmを使用)
java - バッキングBeanにクラス以外の名前を付ける必要がありますか?
アノテーションでバッキングBeanに新しい名前を@Named
付ける必要がありますか、それとも読みやすさのためにクラスと同じ名前を使用する必要がありますか?いつこれを行わないか、いつ行うかについてのガイドラインはありますか?
ドロップダウンコンポーネントに値を提供するバッキングBeanがあります。複数の場所で使用され、読み取り専用であるため、アプリケーションスコープにしました。名前を付けましたStatusValuesManager
。
database - 負の id またはゼロが悪い習慣と見なされるのはなぜですか?
データベーステーブルに主キーを挿入するときに、負の id またはゼロが悪い習慣と見なされるのはなぜですか?
場合によっては役立つと思いますが、その理由を決して言わない/知らないという事実にもかかわらず、人々はそれをお勧めしません.
それで、定義上、何らかの制限があるのか 、それとも問題がないのか 、それとも単なる慣例なのか、それについて実際に制限があるのなら、なぜその機能がブロックされていないのか疑問に思っていました.
architecture - 多層アーキテクチャのデフォルトの関数値
多層アプリケーション構造でデフォルトを設定するための最良の方法を考えています。具体的には、特定のワークフローでネストされた関数呼び出しのセットが必要な場合、デフォルトはすべての関数で指定されていますか、それとも最上位の関数だけで指定されて渡されますか?それとも完全に他のパターンですか?
たとえば、次の3つのレイヤーを持つWebアプリについて考えてみます。
- リソースレイヤーはHTTPリクエストとレスポンスを処理し、クライアントからHTTPパラメーターを取得します
- ビジネス層は、必要な情報を決定するために必要なビジネスロジックを実行します
- データ層はデータベースにアクセスし、要求されたデータを返します。
クライアントが単一のオブジェクトを取得したいとします。この例では、そのオブジェクトを取得しPlace
ます。場所オブジェクトには、type
市、州、町、郡などがあります。
リソース関数は次のようになります(Django HTTPオブジェクトを使用)。
次に、他の2つは次のようになります。
このスタックのリソースレイヤーの「下」にある2つの関数も、デフォルトのタイプを「なし」にする必要がありますか? 私の一部は、そうすることはDRYに違反すると思います。私の別の部分は、それを行う最も予測可能でモジュール式の方法は、スタック内のすべての関数がデフォルトのタイプ「賢明に」を「なし」にすることだと思います。