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

このタグは、特定のプログラミング言語に依存しないプログラミングの質問に使用します。

30
不変コレクションの非変更「追加」メソッドに最適な名前は何ですか?
気まずいタイトルで申し訳ありません-簡潔なタイトルを思い付くことができれば、質問する必要はありません。 不変のリストタイプがあるとします。Foo(x)最後に追加の要素として指定された引数を持つ新しい不変のリストを返す操作があります。したがって、値が「Hello」、「immutable」、「world」の文字列のリストを作成するには、次のように記述します。 var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (これはC#コードであり、言語が重要だと思う場合は、C#の提案に最も興味があります。これは基本的に言語の問題ではありませんが、言語のイディオムは重要かもしれません。) 重要なことは、既存のリストはによって変更されないFooため、empty.Count0を返すことです。 最終結果に到達する別の(より慣用的な)方法は次のとおりです。 var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); 私の質問は、Fooの最高の名前は何ですか? 編集3:後で明らかにするように、型の名前は実際にImmutableList<T>はとは限らないため、位置が明確になります。代わりに、それがTestSuite不変であることを想像してください。それが含まれているフレームワーク全体が不変だからです... (編集終了3) これまでに思いついたオプション: Add:.NETで一般的ですが、元のリストの変更を意味します Cons:これは関数型言語では通常の名前だと思いますが、そのような言語の経験がない人には無意味です Plus:これまでのところ私のお気に入り、それは私に突然変異を意味するものではありません。どうやらこれはHaskellでも使用されているようですが、期待が少し異なります(Haskellプログラマーは、単一の値を他のリストに追加するのではなく、2つのリストを一緒に追加することを期待するかもしれません)。 With:他の不変の慣例と一致していますが、IMOとまったく同じ「追加機能」はありません。 And:あまり説明的ではない +の演算子のオーバーロード:本当にこれが好きではありません。一般に、演算子は下位レベルのタイプにのみ適用する必要があると思います。でも、私は説得されても大丈夫です! 私が選択に使用している基準は次のとおりです。 メソッド呼び出しの結果の正しい印象を与える(つまり、追加の要素を含む元のリストである) 既存のリストを変更しないことを可能な限り明確にする 上記の2番目の例のように連結すると妥当な音 はっきりしない場合は、詳細を尋ねてください... EDIT 1:ここに好むのための私の推論ですPlusしAdd。次の2行のコードを検討してください。 list.Add(foo); list.Plus(foo); 私の見解では(これは個人的なことですが)後者は明らかにバグがあります-「x + …

30
パラメータの数が多すぎますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 4年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 ルーチンはパラメータを持つことができます、それはニュースではありません。必要な数のパラメーターを定義できますが、パラメーターが多すぎると、ルーチンの理解と保守が難しくなります。 もちろん、構造化変数を回避策として使用することもできます。これらの変数をすべて1つの構造体に入れて、それをルーチンに渡します。実際、構造を使用してパラメーターリストを簡略化することは、Steve McConnellがCode Completeで説明した手法の1つです。しかし彼が言うように: 慎重なプログラマーは、論理的に必要以上にデータをバンドルすることを避けます。 したがって、ルーチンのパラメーターが多すぎる場合、または構造体を使用して大きなパラメーターリストを偽装している場合は、おそらく何かが間違っています。つまり、カップリングを緩やかに保つのではありません。 私の質問は、パラメーターリストが大きすぎると見なすことができるのはいつですか?5つを超えるパラメーターは多すぎると思います。どう思いますか?

5
ファイル名?パス名?ベース名?パスの一部の命名基準
パスとファイル名を操作しているとき、私はノットを使い続けています。これは、使用する一般的なネーミングシステムがないためです。 私は命名基準を考え出してそれに固執する必要があり、明確で他の人と一貫したいので、標準的な答えを学ぶために開放しています。 このおもちゃの問題を考えてみましょう:(Windowsの例ですが、うまくいけば答えはプラットフォームに依存しないはずです) フォルダーのフルネームが与えられました:C:\ users \ OddThinking \ Documents \ My Source。下のフォルダーを調べて、すべての.srcを.objにコンパイルします。 ある時点で、次の文字列を確認しています。 C:\users\OddThinking\Documents\My Source\Widget\foo.src では、パーツにどの識別子名を使用しますか? A) foo B) foo.src C) src D) .src E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree. F) Widget\foo.src - i.e. the path from the top of the tree to the leaf. G) …

30
再帰か反復か?
両方で同じ目的を果たすことができるアルゴリズムで、再帰ではなくループを使用した場合、またはその逆の場合、パフォーマンスに影響がありますか?例:指定された文字列が回文かどうかを確認します。多くのプログラマーが再帰を使用して、単純な反復アルゴリズムがうまく機能する時期を自慢する方法を見てきました。コンパイラーは、何を使用するかを決定する上で重要な役割を果たしますか?

30
ビットワイズ演算子の実際の使用例[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 この質問を改善する 次のビット単位演算子の実際の使用例は何ですか? そして XOR ない または 左/右シフト

20
Debug.Assert()はいつ使用する必要がありますか?
私は約1年間プロのソフトウェアエンジニアとして、CSの学位を取得しています。私はC ++とCでアサーションについてしばらく知っていましたが、最近までC#と.NETにアサーションが存在することをまったく知りませんでした。 私たちのプロダクションコードにはアサートがまったく含まれておらず、私の質問はこれです... 製品コードでアサートの使用を開始する必要がありますか?もしそうなら、いつその使用が最も適切ですか?行う方が理にかなっていますか Debug.Assert(val != null); または if ( val == null ) throw new exception();



13
サーバーサイドアプリケーション(PHP、Ruby、Pythonなど)でURLのハッシュ部分を読み取ることはできますか?
以下のURLを想定しています。 www.example.com/?val=1#part2 PHPはval1、GET配列を使用してリクエスト変数を読み取ることができます。 ハッシュ値part2も読み取り可能ですか?それとも、ブラウザとJavaScriptまでしかありませんか?

30
爆弾投下アルゴリズム
n x m非負の整数で構成される行列があります。例えば: 2 3 4 7 1 1 5 2 6 2 4 3 4 2 1 2 1 2 4 1 3 1 3 4 1 2 1 4 3 2 6 9 1 6 4 「爆弾の投下」は、ターゲットセルの数とその隣接セルの8つすべての数を1つ減らし、最低ゼロにします。 x x x x X x x x x すべてのセルをゼロに減らすために必要な爆弾の最小数を決定するアルゴリズムは何ですか? Bオプション(注意深い読者ではないため) …

11
OutOfMemoryErrorをスローするのに十分なメモリがない場合はどうなりますか?
すべてのオブジェクトがヒープメモリを必要とし、スタック上のすべてのプリミティブ/リファレンスがスタックメモリを必要とすることを知っています。 ヒープ上にオブジェクトを作成しようとしたときにメモリ不足が発生すると、JVMはヒープ上にjava.lang.OutOfMemoryErrorを作成し、それをスローします。 つまり、暗黙的に、これは起動時にJVMによって予約されたメモリがあることを意味します。 この予約メモリが使い果たされるとどうなるでしょう(間違いなく使い果たされます。以下の説明をお読みください)。java.lang.OutOfMemoryErrorのインスタンスを作成するのに十分なメモリがJVMにヒープにない場合はどうなりますか? ぶら下がっているだけですか?または、OOMのインスタンスにnullメモリがないため、彼は私を投げますnewか? try { Object o = new Object(); // and operations which require memory (well.. that's like everything) } catch (java.lang.OutOfMemoryError e) { // JVM had insufficient memory to create an instance of java.lang.OutOfMemoryError to throw to us // what next? hangs here, stuck forever? // …

30
すべての開発者がデータベースについて知っておくべきことは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 好むと好まざるとにかかわらず、ほとんどの開発者は、データベースを定期的に使用するか、いつかデータベースを使用する必要があるかもしれません。そして、実際の悪用や乱用の量、および毎日出てくるデータベース関連の質問の量を考えると、開発者が設計または操作しなくても、知っておくべき特定の概念があると言っても過言ではありません。今日のデータベース。そう: 開発者や他のソフトウェア専門家がデータベースについて知っておくべき重要な概念は何ですか? 対応のガイドライン: リストは短くしてください。 回答ごとに1つのコンセプトが最適です。 具体的に。 「データモデリングは、」重要であるかもしれないスキルが、正確にはそれがどういう意味? 根拠を説明してください。 なぜあなたのコンセプトは重要ですか?「インデックスを使う」とだけ言ってはいけません。「ベストプラクティス」に陥らないでください。視聴者を説得してもっと学びましょう。 同意する回答に賛成票を投じます。 最初に他の人の答えを読んでください。ランクの高い回答1つは、ランクの低い回答2つよりも効果的なステートメントです。さらに追加する必要がある場合は、コメントを追加するか、オリジナルを参照してください。 個人的に当てはまらないからといって、反対投票しないでください。 私たちは皆、異なるドメインで働いています。ここでの目的は、データベースの初心者がデータベース設計とデータベース駆動型開発について十分に根拠のある包括的な理解を得るための方向性を提供することです。

25
ループと関数をサポートする言語で「goto」を使用することの利点はありますか?もしそうなら、なぜですか?
私は長い間goto、可能であれば使用すべきではないという印象を受けてきました。先日、libavcodec(Cで書かれています)を調べていると、複数の使い方があることに気付きました。gotoループと関数をサポートする言語で使用することが有利になることはありますか?もしそうなら、なぜですか?

9
独断的なソフトウェアとは何ですか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 特定のソフトウェアが「非常に独断的」である、またはマイクロソフトが「非意見」のフレームワークを作成する傾向があると人々が言っ​​ているのをよく目にします。これは実際にはどういう意味ですか?

14
インプレース基数ソート
これは長いテキストです。我慢してください。要約すると、問題は、実行可能なインプレース基数ソートアルゴリズムがあるかどうかです。 予備的 「A」、「C」、「G」、および「T」の文字のみを使用する小さな固定長の文字列が大量にあります(そうです、ご想像のとおり、DNAです)。 現時点では、STLのすべての一般的な実装でintrosortを使用std::sortします。これはかなりうまくいきます。しかし、基数ソートは私の問題セットに完全に適合し、実際にははるかにうまく機能するはずだと確信しています。 細部 私はこの仮定を非常に単純な実装でテストしました。比較的小さな入力(10,000程度)の場合、これは真実でした(少なくとも、2倍以上の速さ)。ただし、問題のサイズが大きくなると(N > 5,000,000)、ランタイムは少し低下します。 その理由は明らかです。基数ソートでは、データ全体をコピーする必要があります(実際には、私の単純な実装では2回以上)。これは、メインメモリに最大4 GiBを入れたことを意味します。問題のサイズが実際にはさらに大きくなるため、そうでなかったとしても、これだけのメモリを使用する余裕はありません。 ユースケース 理想的には、このアルゴリズムは、DNAおよびDNA5(追加のワイルドカード文字「N」を許可)、またはIUPAC 曖昧コード(結果として16個の異なる値)を持つDNAの場合でも、2〜100の任意の文字列長で機能する必要があります。しかし、これらすべてのケースをカバーすることはできないので、速度の向上に満足しています。コードは、どのアルゴリズムにディスパッチするかを動的に決定できます。 研究 残念ながら、基数ソートに関するウィキペディアの記事は役に立たない。インプレースバリアントに関するセクションは完全にゴミです。基数ソートのNIST-DADSセクションは、存在しないものの隣にあります。アルゴリズム「MSL」について説明しているEfficient Adaptive In-Place Radix Sortingと呼ばれる有望な論文があります。残念ながら、この論文も残念です。 特に、以下のことがございます。 まず、アルゴリズムにはいくつかの間違いがあり、説明がつかないままです。特に、再帰呼び出しの詳細については説明していません(現在のシフト値とマスク値を計算するためにポインターをインクリメントまたは削減すると単純に想定しています)。また、関数dest_groupを使用し、dest_address定義を行いません。これらを効率的に実装する方法がわかりません(つまり、O(1)で、少なくともdest_address簡単ではありません)。 最後に重要なことですが、アルゴリズムは、配列インデックスを入力配列内の要素と交換することにより、インプレースネスを実現します。これは明らかに数値配列でのみ機能します。文字列に使用する必要があります。もちろん、強い型付けをねじ込むだけで、メモリが属していないインデックスの格納をメモリが許容すると想定して先に進むことができます。しかし、これは、文字列を32ビットのメモリ(32ビット整数と仮定)に押し込める場合にのみ機能します。これはわずか16文字です(現時点では、16> log(5,000,000)であるため無視します)。 著者の1人による別の論文では、正確な説明はまったくありませんが、MSLの実行時間がサブリニアであり、これは完全に間違っています。 要約すると:機能するリファレンス実装、または少なくともDNA文字列で機能する機能するインプレース基数ソートの優れた疑似コード/説明を見つける可能性はありますか?

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