タグ付けされた質問 「language-agnostic」

このタグは、プログラミング言語または環境に固有ではない質問用です。

5
言語に依存しないユニットテストフレームワークはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は常に作業コードを書き直すことに懐疑的でした-コードの移植もこれに例外ではありません。ただし、TDDと自動テストの出現により、コードの書き直しとリファクタリングがはるかに合理的になりました。 古いコードの移植に使用できるTDDツールがあるかどうか、誰もが知っていますか?理想的には、次のことができます。 合格する(またはバグを見つけた場合は失敗する)古いコードの言語に依存しない単体テストを作成します。 失敗した他のコードベースで単体テストを実行します。 古いコードを見ずにテストに合格する新しい言語でコードを記述します。 別の方法として、ステップ1を「言語1でユニットテストを書く」と「言語2にユニットテストを移植する」に分割します。これにより、必要な労力が大幅に増加し、ポート(つまり、このコードベースでの継続的な統合の利点は得られません)。 編集:StackOverflowでこの質問に注目する価値があります。

2
イベントバブリングは一般にどのように機能しますか?また、イベントの伝播と同義語ですか?
私は、イベント駆動型(サブ)システムでのイベントディスパッチの一般的な仕組みと原則に頭を包み込もうとしています。 たとえば、Javascript、Flash(Actionscript 2および3)で何度も使用し、一度にPHPで簡単なイベントディスパッチシステムを作成したこともありますが、イベントバブリングやその伝播。 最初の質問: イベントバブリングはイベント伝播の同義語ですか? 2番目の質問: イベントが「バブル」するとき、これはイベントがオブジェクトの階層を「移動」することを意味すると理解して正しいですか? 3番目の最も重要な質問: 質問2の私の理解が正しい場合。これは、一般的に実装されるオブジェクトの階層をどのように「上に」移動するのですか? 一般に、親オブジェクトは同じイベントをその親に「再送信」することを意味しますか(ルートオブジェクトに到達するまで)。そしてそうならば; 階層内のこれらすべてのオブジェクトは、これらのイベントの子をリッスンする必要がありますか、または親オブジェクトが子オブジェクトイベントのリスナーとして自分自身を登録する必要がないイベントバブリングについての理解に重要な原則がありませんか? いくつかの簡単な擬似コードを使用してこれらの基本原理を説明できるとしたら、ありがたいです。

9
チェスのルールを学ぶ
同様の問題は、コンピュータがゲームの数千人を分析することによって、チェスで最適にプレイすることを学ぶことができるかどうか尋ねます。 マシンが最初と各移動後にチェスのいくつかのゲーム(またはチェッカーのいくつかのゲーム)のボードの状態を見ることができる場合、ゲームのルールを学習するようにプログラムできますか? それが可能な場合、どの程度まで(たとえば、キャスティングやプロモーションを説明できるでしょうか)、これは機能しますか?どの機械学習アルゴリズムがこれを可能にしますか?

7
XMLを解析するためのテクニック
私は常にXMLの処理がやや面倒だと感じてきました。私はXMLパーサーの実装について話しているのではなく、ノードごとにXMLを処理するSAXパーサーのような既存のストリームベースのパーサーの使用について話しているのです。 はい、これらのパーサーのさまざまなAPIを学ぶのは非常に簡単ですが、XMLを処理するコードを見ると、常に多少複雑になることがわかります。本質的な問題は、XMLドキュメントが個々のノードに論理的に分離されているにもかかわらず、データの種類と属性が実際のデータから分離されていることが多いことです。したがって、特定のノードを個別に処理する場合、現在の場所と次に何をする必要があるかを判断するために、多くの余分な状態を維持する必要があります。 たとえば、典型的なXMLドキュメントからスニペットが与えられた場合: <book> <title>Blah blah</title> <author>Blah blah</author> <price>15 USD</price> </book> ...本のタイトルを含むテキストノードに出会ったとき、どのように判断しますか?イテレータのように動作し、を呼び出すたびにXMLドキュメントの次のノードを提供する単純なXMLパーサーがあるとしますXMLParser.getNextNode()。私は必然的に次のようなコードを書くことに気づきます。 boolean insideBookNode = false; boolean insideTitleNode = false; while (!XMLParser.finished()) { .... XMLNode n = XMLParser.getNextNode(); if (n.type() == XMLTextNode) { if (insideBookNode && insideTitleNode) { // We have a book title, so do something with it } …


7
カップリング。ベストプラクティス
このスレッドに続いて、私は始めました シングルトンパターン クラスがどのように結合されているか、そして疎結合を達成するための最良の方法について考えさせられました。私は新しいプログラマー(最初の仕事を始めて4か月)であり、これが実際に私がこれに与えた最初の考慮事項であり、コンセプトを理解することに非常に熱心であることに留意してください。 では、疎結合と重結合を正確に構成するものは何ですか?私の現在の(そして最初のプロジェクト)では、ac#winformsプロジェクトに取り組んでいます.GUIセクションはオブジェクトとイベントへのサブクリブを作成します標準のdatagridviewをラップして追加の機能を追加する)を作成し、それをGUIにアタッチしています。 私は本当に悪い習慣に陥り、コーディングが不十分になりたくないので、あなたの反応に感謝します。

4
楽観的ロックが機能しない場合はどうすればよいですか?
私は次のシナリオを持っています: ユーザーがETagに対してGETリクエストを/projects/1行い、ETagを受け取ります。 ユーザーは、ステップ1のETag を使用してPUTリクエストを/projects/1行います。 ユーザーは/projects/1、ステップ1のETag を使用して別のPUTリクエストを行います。 ETagが古くなっているため、通常、2番目のPUTリクエストは412応答を受け取ります。最初のPUTリクエストがリソースを変更したため、ETagは一致しなくなりました。 しかし、2つのPUT要求が同時に(またはちょうど1つずつ)送信された場合はどうなりますか?最初のPUT要求には、PUT#2が到着する前にリソースを処理および更新する時間がないため、PUT#2がPUT#1を上書きします。楽観的ロックの要点は、それが起こらないようにすることです...

5
すべての条件をキャッチするはずのif-elseラダー-冗長なfinal句を追加する必要がありますか?
これは私が最近よくしていることです。 例: setCircle(circle, i, { current }) { if (i == current) { circle.src = 'images/25CE.svg' circle.alt = 'Now picking' } else if (i < current) { circle.src = 'images/25C9.svg' circle.alt = 'Pick failed' } else if (i > current) { circle.src = 'images/25CB.svg' circle.alt = 'Pick chance' } } …

2
JavaおよびC#によってメモリの安全性が提供されるのと同様のプログラミング言語によって、スレッドの安全性をどのように提供できますか?
JavaとC#は、配列の境界とポインターの逆参照をチェックすることにより、メモリの安全性を提供します。 競合状態やデッドロックの可能性を防ぐために、プログラミング言語にどのようなメカニズムを実装できますか?

4
コンパイラは型エラーからどの程度正確に回復しますか?
私はいくつかの論文、記事、およびコンパイラー:原則、手法、およびツール(第2版)(別名「ドラゴン・ブック」)のセクション4.1.4、第4章を読み、すべて構文コンパイラーのエラー回復のトピックについて説明しています。ただし、いくつかの最新のコンパイラーで実験した後、構文エラーだけでなく、セマンティックエラーからも回復することがわかりました。 構文的に関連するエラーから回復するコンパイラーの背後にあるアルゴリズムと手法はかなりよく理解していますが、コンパイラーがセマンティックエラーから回復する方法を正確には理解していません。 現在、ビジターパターンのわずかなバリエーションを使用して、抽象構文ツリーからコードを生成しています。コンパイラが次の式をコンパイルすることを検討してください。 1 / (2 * (3 + "4")) コンパイラーは、次の抽象構文ツリーを生成します。 op(/) | ------- / \ int(1) op(*) | ------- / \ int(2) op(+) | ------- / \ int(3) str(4) コード生成フェーズでは、ビジターパターンを使用して、抽象構文ツリーを再帰的に走査し、型チェックを実行します。コンパイラが式の最も内側の部分に到達するまで、抽象構文ツリーをたどります。(3 + "4")。次に、コンパイラーは式の両側をチェックし、それらが意味的に同等ではないことを確認します。コンパイラは型エラーを発生させます。ここに問題があります。今コンパイラは何をすべきですか? コンパイラは、このエラーから回復し、式の外側の部分を型チェックを継続するためには、返却しなければならないいくつかのタイプ(intまたはstrに、表現の最も内側の部分を評価するから)を、次式の最も内側の部分。ただし、単に返すタイプがありません。型エラーが発生したため、型は推定されませんでした。 私が仮定した1つの可能な解決策は、型エラーが発生した場合、エラーが発生し、型エラーが発生したことを示す特別な値が以前の抽象構文ツリートラバーサル呼び出しに返されることです。以前のトラバーサル呼び出しでこの値が検出された場合、抽象構文ツリーのより深いところで型エラーが発生したことがわかっているため、型を推測することは避けてください。この方法は機能するように見えますが、非常に非効率的です。式の最も内側の部分が抽象構文ツリーの奥にある場合、コンパイラーは多くの再帰呼び出しを行って、実際の作業が実行できないことを認識し、それぞれから単に戻る必要があります。 上記の方法を使用していますか(疑わしい)。もしそうなら、それは効率的ではありませんか?そうでない場合、コンパイラがセマンティックエラーから回復するときに使用される方法は正確には何ですか?

3
妥協する必要があります:DRY、またはCommand-Query-Separation?
私は最近、コマンドとクエリメソッドの両方であるメソッドをリファクタリングしていました。 それを1つのコマンドメソッドと1つのクエリメソッドに分離した後、コマンドを呼び出してクエリから値を取得するコード内の複数の場所があり、これはDRYの原則に違反しているようです。 しかし、その一般的なコードをメソッドにラップすると、そのメソッドはコマンドとクエリの両方になります。これは受け入れられますか?

3
メソッドのオーバーロードはいつ適切ですか?
既存のかなり大きなシステムで作業しているとしましょう。myObjectクラスのオブジェクトがありますMyClass(例として、Javaで作業しているとします)。myObjectはCollection、たとえばa Listと、(私が思うに)無関係な他のオブジェクトを含むコンポジションです。これには、Listそれが構成されているメソッドを呼び出す役割を果たしているデリゲートメソッドが含まれていますList。 これListがaであるとしましょう。List<String>何らかの理由で、メインのアクセスメソッドはclassのマスクメソッドですSomeOtherClass。新しい値のペアをmyに挿入しListたい場合は、SomeOtherClass呼び出されたオブジェクトがありますsomeObject。私が呼び出すmyObject.insert(someObject)と、insertメソッド内にを取得してStringに入れる魔法がいくつかありますList<String>。 今、String値しか持っておらずSomeOtherClass、挿入するオブジェクトがないとします。insertこのシステムのすべてを破壊するため、メソッドを変更できないと仮定します。次に、insertメソッドをオーバーロードする必要がありますか?またはSomeOtherClass呼び出すたびに新しいオブジェクトを作成する必要がありますinsertか? オーバーロードするとこんな感じになりますね… public void insert(String s) { ... } public void insert(SomeOtherObject obj) { this.insert(obj.magicStringMethod()); } (この例は、昨日発生したオーバーロードに関する同様の(やや複雑な)状況に基づいた不自然なパズルです。不明な点がある場合は展開します) これはメソッドをオーバーロードするのに適切な場所でしょうか?そうでない場合、いつメソッドをオーバーロードする必要がありますか?

5
ユニットテストの前または後にコードレビューを実行する必要があります
ユニットテストの前または後に、コードレビューをいつ実行するかについて同僚と議論しています。ベストプラクティスは何ですか? 考慮に入れる必要があるいくつかの要因(さらにある場合があります): コード変更のサイズ-大きな変更は、コードレビューからさらに多くの変更が行われることを意味します。これらの変更が大きい場合、UTがコードレビューの前だった場合は、ほとんどのUTを再度繰り返す必要があります。 単体テストの実行に必要な時間 新しい機能ですか、それともバグ修正ですか

4
STDOUTとその不純
私は関数型プログラミングに関する多くの本や記事を読みましたが、いくつかの非常に基本的な概念を確実に理解できなかったことを恥ずかしく思っています。 関数型プログラミングの主なアイデアの1つは、同じ入力は常に同じ出力を生成するということです。したがって、データベースのクエリやファイルの書き込みは、純粋に機能的なスタイルで行うことはできません。たとえば、モナドが必要な理由の1つです。 問題は、なぜSTDOUT出力を不純なものと見なすのかです。はい、どのファイルハンドラーも危険です-データが常に書き込まれると確信することはできません。しかし、STDOUTはどうですか?なぜそれを信頼できないものと考えるべきなのでしょうか?評価自体の方が信頼性が低いですか?つまり、トリガーを引いて、計算を中断することができます。

4
リソースを「高価」にするものは何ですか?
私は休止状態を読んでいて、「JDBC接続が複数の要求にわたって開かれているのは高価なリソースであるため、良いことではありません」などの文に出くわしました。 高価なリソースとはどういう意味ですか? 編集:不明なユーザーがコメントとして追加したものを以下に追加しています。 データベース接続の確立にコストがかかる場合は、データベースを閉じて毎回開くのではなく、同じものを(キャッシュではなく)何度も使用しないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.