タグ付けされた質問 「idioms」

プログラミングイディオムは、プログラミング言語の制限を克服したり、コードの文字通りの意味から切り離された目的で一般的に使用されるコードを記述したりする方法です。また、明白な方法が複数ある場合、イディオムはコードを書くための好ましい方法です。

30
var functionName = function(){} vs function functionName(){}
最近、他人のJavaScriptコードの保守を始めました。私はバグを修正し、機能を追加し、コードを整理してより一貫性のあるものにしようとしています。 以前の開発者は2つの方法で関数を宣言していましたが、その背後に理由があるかどうかはわかりません。 2つの方法は次のとおりです。 var functionOne = function() { // Some code }; function functionTwo() { // Some code } これらの2つの異なる方法を使用する理由は何ですか、それぞれの長所と短所は何ですか?ある方法でできること、他の方法ではできないことはありますか?

30
__name__ ==「__main__」の場合はどうなりますか?
StackаэтотвопросестьответынаStack Overflowнарусском:ifтоделаютif __name__ ==“ __main__”? 次のコードが与えられた場合、何をしif __name__ == "__main__":ますか? # Threading example import time, thread def myfunction(string, sleeptime, lock, *args): while True: lock.acquire() time.sleep(sleeptime) lock.release() time.sleep(sleeptime) if __name__ == "__main__": lock = thread.allocate_lock() thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock)) thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

10
C ++でファクトリメソッドパターンを正しく実装する方法
簡単に聞こえますが、正直に言うとどうすればいいのかわからないので、C ++には長い間不快に感じていたものが1つあります。 C ++でFactoryメソッドを正しく実装するにはどうすればよいですか? 目標:許容できない結果やパフォーマンスへの影響なしに、クライアントがオブジェクトのコンストラクタの代わりにファクトリメソッドを使用してオブジェクトをインスタンス化できるようにすること。 「ファクトリー・メソッド・パターン」とは、オブジェクト内の静的なファクトリー・メソッドまたは別のクラスで定義されたメソッド、またはグローバル関数の両方を意味します。一般的には、「クラスXのインスタンス化の通常の方法をコンストラクター以外の場所にリダイレクトするという概念」です。 私が考えたいくつかの可能な答えをざっと見てみましょう。 0)工場を作らず、コンストラクタを作る。 これは良さそうですが(実際、多くの場合は最善の解決策です)、一般的な解決策ではありません。まず、オブジェクトの構築が別のクラスへの抽出を正当化するのに十分複雑なタスクである場合があります。しかし、その事実はさておき、コンストラクターだけを使用する単純なオブジェクトの場合でさえ、多くの場合そうしません。 私が知っている最も簡単な例は、2-D Vectorクラスです。とてもシンプルですが、トリッキーです。デカルト座標と極座標の両方から構築できるようにしたいと考えています。明らかに、私はできません: struct Vec2 { Vec2(float x, float y); Vec2(float angle, float magnitude); // not a valid overload! // ... }; 私の自然な考え方は次のとおりです。 struct Vec2 { static Vec2 fromLinear(float x, float y); static Vec2 fromPolar(float angle, float magnitude); // ... }; これは、コンストラクターの代わりに、静的ファクトリーメソッドの使用につながります...これは、本質的に、何らかの方法でファクトリーパターンを実装していることを意味します(「クラスが独自のファクトリーになる」)。これは見栄えがよく(この特定のケースに適しています)、場合によっては失敗します。これについては、ポイント2で説明します。 …


9
マップのC ++マップをループするにはどうすればよいですか?
std::mapC ++でループするにはどうすればよいですか?私の地図は次のように定義されています: std::map< std::string, std::map<std::string, std::string> > たとえば、上記のコンテナは次のようなデータを保持します。 m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2"; このマップをループしてさまざまな値にアクセスするにはどうすればよいですか?

23
最初のアイテムを返すPythonイディオムまたはNone
これを行う簡単な方法が、私には起こらないと確信しています。 リストを返す一連のメソッドを呼び出しています。リストは空の場合があります。リストが空でない場合は、最初のアイテムを返します。それ以外の場合は、Noneを返します。このコードは機能します: my_list = get_list() if len(my_list) > 0: return my_list[0] return None これを行うための簡単な1行のイディオムがあるべきだと私には思われますが、私の人生では、それを考えることはできません。ある? 編集: ここで1行の式を探しているのは、信じられないほど簡潔なコードが好きなのではなく、次のようなコードをたくさん書かなければならないからです。 x = get_first_list() if x: # do something with x[0] # inevitably forget the [0] part, and have a bug to fix y = get_second_list() if y: # do something with y[0] # inevitably …

30
Javaでint配列を反転するにはどうすればよいですか?
OverаэтотвопросестьответынаStack Overflowнарусском:КакперевернутьмассиввДжаве? Javaでint配列を反転しようとしています。 このメソッドは配列を反転しません。 for(int i = 0; i < validData.length; i++) { int temp = validData[i]; validData[i] = validData[validData.length - i - 1]; validData[validData.length - i - 1] = temp; } それの何が問題になっていますか?
238 java  arrays  idioms  idiomatic 

21
「for」ループの最後の要素を検出するpythonicの方法は何ですか?
forループの最後の要素に対して特別な処理を行うための最良の方法(よりコンパクトで "pythonic"な方法)を知りたいのですが。要素間でのみ呼び出す必要があるコードがあり、最後のコードでは抑制されています。 ここに私が現在それをしている方法があります: for i, data in enumerate(data_list): code_that_is_done_for_every_element if i != len(data_list) - 1: code_that_is_done_between_elements もっと良い方法はありますか? 注:を使用するなどのハックでそれを作りたくありませんreduce。;)

16
Python:Noneを空の文字列に変換する最も慣用的な方法?
以下を行う最も慣用的な方法は何ですか? def xstr(s): if s is None: return '' else: return s s = xstr(a) + xstr(b) 更新: str(s)を使用するようにTryptichの提案を組み込んでいます。これにより、このルーチンは文字列以外のタイプでも機能します。私はVinay Sajipのラムダの提案にひどく感銘を受けましたが、コードを比較的単純に保ちたいと思っています。 def xstr(s): if s is None: return '' else: return str(s)
156 string  python  idioms 



9
単一リストのペア
多くの場合、リストをペアで処理する必要があることがわかりました。私はそれを行うためのpythonicかつ効率的な方法はどれだろうと思っていました、そしてこれをGoogleで見つけました: pairs = zip(t[::2], t[1::2]) 私はそれは十分にパイソンだと思ったが、イディオム対効率に関する最近の議論の後で、私はいくつかのテストをすることに決めた: import time from itertools import islice, izip def pairs_1(t): return zip(t[::2], t[1::2]) def pairs_2(t): return izip(t[::2], t[1::2]) def pairs_3(t): return izip(islice(t,None,None,2), islice(t,1,None,2)) A = range(10000) B = xrange(len(A)) def pairs_4(t): # ignore value of t! t = B return izip(islice(t,None,None,2), islice(t,1,None,2)) for f in …
98 python  list  zip  slice  idioms 

10
`dict in dict`対` try / except`-どちらがより読みやすいイディオムですか?
イディオムと読みやすさについて質問があります。この特定のケースでは、Pythonの哲学が衝突しているようです。 ディクショナリBからディクショナリAを作成したい。Bに特定のキーが存在しない場合は、何もせずに続行する。 どっちがいい? try: A["blah"] = B["blah"] except KeyError: pass または if "blah" in B: A["blah"] = B["blah"] 「許しをしなさい」対「単純さと明快さ」。 どちらがより良いのですか、そしてなぜですか?

3
Groovyによる文字列の連結
Groovyで文字列を連結するための最良の(慣用的な)方法は何ですか? オプション1: calculateAccountNumber(bank, branch, checkDigit, account) { bank + branch + checkDigit + account } オプション2: calculateAccountNumber(bank, branch, checkDigit, account) { "$bank$branch$checkDigit$account" } 以前のGroovy Webサイトでこのトピックに関する興味深いポイントを見つけました。 Javaと同様に、文字列を「+」記号で連結できます。しかし、Javaは、「+」式の2つの項目のうちの1つが文字列であることだけを必要とします。それが最初にあるか、最後にあるかは関係ありません。Javaは、「+」式の非文字列オブジェクトでtoString()メソッドを使用します。しかし、Groovyでは、「+」式の最初の項目がplus()メソッドを正しい方法で実装するので安全である必要があります。Groovyはそれを検索して使用するからです。Groovy GDKでは、NumberクラスとString / StringBuffer / Characterクラスのみに、文字列を連結するために実装されたplus()メソッドがあります。驚きを避けるために、常にGStringsを使用してください。


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