問題タブ [library-design]
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++ - C++ で #include に特定の順序が必要なのは、ライブラリ/ヘッダーの設計が悪いことの兆候ですか?
私はいくつかの非常に大規模なシステムを使用しており、必要な注文を見たことはありませんでしたが、最近見つけました。STL または STD ライブラリ、さらには Boost にも、特定のインクルードを特定の順序で配置する必要があるケースはありますか?
c++ - std :: fstreamがEOFビットをそのように設定するのはなぜですか?
最近、fstream :: eof()を使用することで問題が発生しました。私はここから次の行を読みました:
関数eof()は、関連付けられた入力ファイルの終わりに達した場合はtrueを返し、それ以外の場合はfalseを返します。
そして(誤って)これは、fstream :: read()を使用してファイルの終わりを超えて読み取った場合、関数eof()が教えてくれることを意味すると想定していました。だから私はこのようなことをしました(非常に一般化されています):
この問題は、上記のリンク先のページで後で説明されていることが原因で発生しました(誤解を招く最初の段落のおかげで、最初は読むことができませんでした)。
逆に、最後のトークンの後に空白がある場合、ストリームはEOF状態にはなりませんが、別のトークンを読み取ろうとすると失敗します。したがって、EOFフラグは、EOFまですべてのストリームコンテンツを読み取ることを目的としたループのテストとして使用することはできません。代わりに、読み取りを試みた後、失敗状態をチェックする必要があります。
そこで変更を加えたところ、ループはfile.eof()ではなくfile.fail()をチェックし、eof()がどのように機能するかを理解しました。私の質問は、なぜそれがそのように機能するのかということです。これが望ましい状況はありますか?EOFを通過すると、EOFを通過し、eof()はtrueを返すはずです。
更新 回答ありがとうございます、私はそれを持っていると思います。私が実行している操作はread()だけで、すぐにfail()をチェックするので、大丈夫だと思います。さて、私の質問は、eof()を何に使用するのかということです。
oop - 再利用可能なコードのアーキテクチャ
私は、共通の構造を共有し、同じことのいくつかを同じ方法で実行する必要があるいくつかの小さくて単純なアプリケーションを作成しています (例: ロギング、データベース接続のセットアップ、環境のセットアップ)。再利用可能なコンポーネント。コードは、強く静的に型付けされた言語 (Java や C# など、両方でこの問題を解決する必要がありました) で記述されています。現時点で私はこれを持っています:
より良い方法はありますか?もしかして以下のような?トレードオフを比較検討するのに苦労しています...
明らかなトレードオフの 1 つは、オプション 2 では、「フレームワーク」がアプリを try-catch ブロックでラップできないことです...
.net - .Net フレームワークにプライオリティ キュー クラスがないのはなぜですか?
スタック オーバーフローには、.Net および C# でのプライオリティ キューの実装を扱うスレッドがいくつかあります。
私の問題はより基本的な性質のものです: .Net フレームワークにすぐに使用できるプライオリティ キューがないのはなぜですか? C++ 標準ライブラリにもあります。
.net - .NET の readonly/const はどこにありますか?
C++ では、void func(const T& t)
どこにでも表示されます。ただし、.NET で同様のものを見たことがありません。なんで?
構造体を使用してかなりの量のパラメーターがあることに気付きました。しかし、readonly/const の関数が表示されません。実際に試してみたので、これらのキーワードを使用して、渡されたリストを変更しないことを約束する関数を作成できませんでした。この関数がリストの内容を変更しないことを呼び出し元に約束する方法はありませんか? コードを呼び出して、このリストを変更してはいけないと言う方法はありませんか? (リストのクローンを作成したり、ドキュメントを参照したりできることはわかっていますが、コンパイル エラーが時々発生するのが好きです)
python - Python アプリケーション用の単純なデータベース パッケージを作成するにはどうすればよいですか?
sqlite3 をベースとしてアプリケーション用のデータベース ライブラリを構築しています。私はそれを次のように構造化したい:
したがって、Pythonでこれを行います:
データベース接続の処理方法について、分析麻痺に苦しんでいます (ああ、いや!)。私は本当にこれらのモジュールでクラスを使用したくありません.同じ方法で同じデータベースをすべて操作できる一連の「ユーザー」オブジェクトを作成できるのは実際には適切ではないようです-したがって、接続を継承することはノーゴー。
すべてのモジュールが使用するデータベースへのグローバル接続を 1 つ作成し、これを各モジュールに配置する必要があります。
または、モジュールごとに新しい接続を作成し、それを維持する必要がありますか?
または、トランザクションごとに新しい接続を作成する必要がありますか?
これらのデータベース接続はどのように使用されることになっていますか? 同じことがカーソル オブジェクトにも当てはまります。トランザクションごとに新しいカーソルを作成しますか? データベース接続ごとに 1 つだけ作成しますか?
c++ - C および C++ インターフェイスを使用してライブラリを作成する場合、どの方法でラップしますか?
ライブラリ (libfoo と呼びましょう) を準備するとき、次のようなジレンマに直面していることに気付きます: C ラッパーを使用して C++ ライブラリとして記述しますか?
それとも、C++ ラッパーを使用して C ライブラリとして記述した方がよいでしょうか。
どちらが好きですか、なぜですか? 私は後者を好みます。これは、私の C 関数で誤って例外が発生することを心配する必要がないことを意味するからです。また、言語としては C がより小さな意味論的地雷原であると感じているため、C を好みます。他の人はどう思いますか?
編集:非常に多くの良い答え。皆さんありがとう。1つしか受け入れられないのは残念です。
.net - 再利用可能なクラスライブラリ-INotifyPropertyChanged
私は、主にビジネスオブジェクトとそれらのオブジェクトを操作するためのいくつかのメソッドを含むクラスライブラリを参照するWPFアプリケーションを開発しています。このライブラリはWPFと組み合わせて使用されているため、INotifyPropertyChangedインターフェイスを使用する必要があります。
ただし、プレゼンテーション層としてWPFに特に依存しない(またはプロパティ変更通知の必要性がある)ライブラリでの将来の使用は見られます。あなたの専門的な経験では、別の方法を見つけてDLLが不要なコードから「クリーン」になるようにインターフェイスを省略するか、インターフェイスを使用して先に進む方がよいでしょうか。
(明らかに、これは他のさまざまなプログラミング手法に適用できます)。
ありがとう。
javascript - JavaScript ライブラリをアタッチするための HTML 要素を識別するデファクト スタンダードはありますか?
JavaScript ライブラリを作成しています。このライブラリは、HTML ドキュメント内の 1 つまたは複数の div にアタッチされます。ユーザーがライブラリを簡単に統合できるように、自動的にアタッチしたいと思います。HTML 要素がこのようにライブラリに対してどのように識別されるかについて、デファクト スタンダードまたはベスト プラクティスはありますか? 現在、id="fooLibDiv1" や "fooLibMyDiv" など、特定のプレフィックスで始まる ID を持つすべての要素を探しています。これは脆く感じます。'attachFooLib="yes"' のような非標準の属性を探すほうがよいでしょうか? または、特定の CSS クラスを探しますか? 等。
(FWIW、ユーザーにjQueryを要求したくありません。また、ここでコードを探しているのではなく、正しい設計アプローチがどうあるべきかだけです。)
c++ - フリー関数またはメンバー関数による拡張の仕組み
標準で含まれている C++ ライブラリのロードにより、オブジェクトをライブラリで使用するように適合させることができます。多くの場合、同じ名前空間内のメンバー関数またはフリー関数のどちらかを選択します。
ライブラリコードがこれらの「拡張」関数の1つを呼び出す呼び出しをディスパッチするために使用するメカニズムと構成を知りたいのですが、この決定はコンパイル時に行う必要があり、テンプレートが関係していることを知っています。次のランタイム疑似コードは不可能/無意味です。理由はこの質問の範囲外です。
上記のコードは、ランタイム コードのように見えます:/. では、ライブラリはクラスが存在する名前空間をどのように把握するのか、3 つの条件をどのように検出するのか、回避する必要があるその他の落とし穴にはどのようなものがあるのでしょうか。
私の質問の動機は、ライブラリでディスパッチ ブロックを見つけ、自分のコードで構成を使用できるようにすることです。したがって、詳細な回答が役立ちます。
!!報奨金を獲得するために!!
わかりましたので、Steve からの回答 (およびコメント) によると、ADL と SFINAE は、コンパイル時にディスパッチを配線するための重要な構成要素です。私は ADL (基本的に) と SFINAE (これも初歩的) の周りに頭を抱えています。しかし、私が思うように、彼らがどのように組織化されているかはわかりません。
オブジェクト内のユーザー提供のメンバー関数を呼び出すか、同じオブジェクトの名前空間で提供されるユーザー提供の自由関数を呼び出すかを、ライブラリがコンパイル時に選択できるように、これら 2 つの構造を組み合わせる方法の例を示したいと思います。これは、上記の 2 つの構成体を使用してのみ行う必要があり、いかなる種類のランタイム ディスパッチも使用しないでください。
問題のオブジェクトが と呼ばれNS::Car
、このオブジェクトが の動作をMoveForward(int units)
メンバー関数 ofc として提供する必要があるとします。動作がオブジェクトの名前空間から取得される場合、おそらく のようになりますMoveForward(const Car & car_, int units)
。をディスパッチしたい関数を定義しましょうmover(NS::direction d, const NS::vehicle & v_)
。ここで、方向は列挙型で、v_ は の基底クラスですNS::car
。