問題タブ [idioms]
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# - 「GetOrCreate」 - そのイディオムには確立された名前がありますか?
わかりました、私たちのほとんどが何度も使用しているこの一般的なイディオムを考えてみてください (私は推測します):
何か確立された名前はありますか?
(はい、C# で記述されていますが、「簡単に」C++ に転送できます。したがって、そのタグです。)
algorithm - 複数パスで文字列を解析するためのプログラミング イディオム
私は点字翻訳ライブラリに取り組んでおり、テキストの文字列を点字に翻訳する必要があります。これを複数のパスで行う予定ですが、文字列のどの部分が翻訳され、どの部分が翻訳されていないかを追跡する方法が必要なので、それらを再翻訳しません。
処理された文字列内の位置の範囲を追跡するクラスをいつでも作成でき、その後のパスでそれらを無視するように検索/置換アルゴリズムを設計できますが、よりエレガントな方法がないかどうか疑問に思っています同じことを達成するために。
マルチパス文字列変換はそれほど珍しいことではないと思いますが、それを行うためのオプションが何であるかはわかりません。
java - Javaで可逆的な列挙型を作成しようとする必要がありますか、それともより良い方法がありますか?
私は何度もこの問題に直面したようで、間違ったツリーを吠えているだけなのかコミュニティに尋ねたかった. 基本的に、私の質問は次のように要約できます。値が重要な列挙型 (Java の場合) がある場合、列挙型を使用する必要がありますか、それともより良い方法がありますか?列挙型を使用する場合はどうすればよいですか?ルックアップを逆にする最良の方法は何ですか?
これが例です。特定の月と年を表す Bean を作成したいとします。次のようなものを作成する場合があります。
ここでは、月を Month という別のクラスとして保存しているため、タイプ セーフになっています。int だけを入力すると、誰でも 13、5,643、または -100 を数値として渡すことができ、コンパイル時にそれをチェックする方法がなくなります。列挙型として実装する月を入れるように制限しています。
ここで、書き込みたいバックエンド データベースがあり、整数形式のみを受け入れるとします。これを行う標準的な方法は次のようです。
かなり簡単ですが、これらの値をデータベースから読み取るだけでなく、書き込む場合はどうなりますか? int を取り、それぞれの Month オブジェクトを返す enum 内の case ステートメントを使用して、静的関数を実装できます。しかし、これは、何かを変更した場合、この関数とコンストラクターの引数を変更する必要があることを意味します - 2 つの場所で変更します。これが私がやってきたことです。まず、リバーシブル マップ クラスを次のように作成しました。
次に、コンストラクターメソッドの代わりに列挙型内にこれを実装しました。
これで、私が望むすべてのことができますが、それでも間違っているように見えます。「列挙に意味のある内部値がある場合は、代わりに定数を使用する必要があります」と人々は私に提案しました。ただし、そのアプローチが私が探しているタイプセーフをどのように提供するかはわかりません。しかし、私が開発した方法は非常に複雑に思えます。この種のことを行う標準的な方法はありますか?
PS: 政府が新しい月を追加する可能性はかなり低いことはわかっていますが、全体像を考えてみてください。enum には多くの用途があります。
python - 慣用的な Python has_one
私はちょうどばかげた小さなヘルパー関数を発明しました:
私が思いついた最も読みやすい/慣用的なインラインのものは次のとおりだったからです。
... seq が小さいことはわかっているので、私の場合は問題ありませんが、奇妙に感じます。このヘルパーを壊す必要がないようにする、ここで忘れているイディオムはありますか?
明確化
振り返ってみると、これはちょっとくだらない質問でしたが、いくつかの優れた回答が得られました! 私はどちらかを探していました:
- 明白で読みやすいインライン イディオムまたは stdlib 関数。この場合、熱心な評価が受け入れられます。
- より明白で読みやすいヘルパー関数 -- 他の関数全体を分割しているため、最小限の評価のみが許容されるようです。
@Stephan202はヘルパー関数の非常にクールなイディオムを思いつき、 @ Martin v. Löwisは、述語が bool を返すという仮定の下で、より単純なインライン イディオムを思いつきました。助けてくれてありがとう@みんな!
f# - F# 関数からの複数の終了
これは C++ で簡単に実行できます (注: これが正しいかどうかはテストしていません。これは、私がやろうとしていることを説明するためだけです)。
しかし、F# の早い段階でルーチンを終了する方法がわかりません。私がやりたいことは、入力が正しくない場合は関数を終了し、入力が問題ない場合は続行することです。F# のいくつかの基本的な特性が欠けているのでしょうか、それとも FP を学習しているだけなので、間違った方法で問題に取り組んでいますか? ここで私の唯一のオプションは失敗ですか?
これは私がこれまでに得たものであり、正常にコンパイルされます:
この種のことを扱うFPの方法はありますか?
for-loop - 「for」ループの最後の要素を検出するpythonicの方法は何ですか?
forループの最後の要素を特別に処理するための最良の方法(よりコンパクトで「pythonic」な方法)を知りたいです。要素間でのみ呼び出す必要があり、最後のコードでは抑制されているコードがあります。
これが私が現在行っている方法です:
もっと良い方法はありますか?
注: を使用するなどのハックで作成したくありませんreduce
。;)
embedded - 累積誤差なしで時間を維持するにはどうすればよいですか?
秒単位の時間の固定小数点表現が必要であり、ティック間の時間がその固定小数点形式で正確に表現できない場合、単純な組み込みシステムで時間を追跡するにはどうすればよいでしょうか? そのような状況で累積エラーをどのように回避しますか。
この質問は、 slashdot に関するこの記事への反応です。
1/3 を 10 進固定小数点数として適切に表現できないのと同様に、0.1 秒を 2 進固定小数点数として適切に表現することはできません。2 進固定小数点表現には小さな誤差があります。たとえば、ポイントの後に 8 バイナリ ビットがある場合 (つまり、256 でスケーリングされた整数値を使用)、0.1 x 256 は 25.6 であり、25 または 26 に丸められ、-2.3% のオーダーのエラーが発生します。またはそれぞれ+1.6%。ポイントの後にバイナリ ビットを追加すると、このエラーの規模は小さくなりますが、なくすことはできません。
加算を繰り返すと、誤差は徐々に蓄積されます。
どうすればこれを回避できますか?
vba - プロパティの非存在をテストするためのMicrosoftVBAイディオム(Visio)?
特に、Visioの下位バージョンには存在しないプロパティに書き込んでいるため、Visio2003で動作するマクロが下位バージョンのVisioで問題を引き起こさないようにする必要があります。現在、私はこれを行っています:
これは機能しますが、少し面倒だと思います。'Application.version'(Visio 2003では'11'を返す)を使用するというアイデアをいじくりまわしましたが、特定のリリースで使用できるプロパティについての仮定を避け、プロパティ自体をテストするだけです。
VBAでこれを行うための適切なイディオムは何ですか?
ありがとう
---以下のいくつかの答えを得ました、私の好ましい解決策はこれでした:
python - 1行の「if」/「for」ステートメントはPythonスタイルに適していますか?
ここで、誰かのコードと、従来の「if」ステートメントまたは「for」ループが機能する標準的な方法で実行される 1 行のステートメントである「ワンライナー」のように見えるものをよく見かけます。
私はグーグルで検索しましたが、実際に実行できるものを見つけることができませんか? 誰かが助言し、できればいくつかの例を挙げてもらえますか?
たとえば、これを 1 行で実行できますか。
または:
ruby - Rubyのクラス定義でクラス/インスタンス変数を設定する慣用的な方法は何ですか?
たとえば、Pythonでは、次のようなクラスを作成できます。
...ここで、barはクラス属性であり、some_attrはインスタンス属性です。Rubyでこのようなことを行う慣用的な方法は何ですか?