タグ付けされた質問 「coding-style」

コーディングスタイルは、ソースコードの読みやすさと理解に役立つ一連のガイドラインです。

3
テストと製品コードの間で定数を複製しますか?
テストと実際のコード間でデータを複製するのは良いですか、悪いですか?たとえば、FooSaver特定の名前のファイルを特定のディレクトリに保存するPythonクラスがあるとします。 class FooSaver(object): def __init__(self, out_dir): self.out_dir = out_dir def _save_foo_named(self, type_, name): to_save = None if type_ == FOOTYPE_A: to_save = make_footype_a() elif type == FOOTYPE_B: to_save = make_footype_b() # etc, repeated with open(self.out_dir + name, "w") as f: f.write(str(to_save)) def save_type_a(self): self._save_foo_named(a, "a.foo_file") def save_type_b(self): self._save_foo_named(b, "b.foo_file") 私のテストでは、これらのファイルがすべて作成されたことを確認したいので、次のように言いたいと思います。 …

7
クラスとメソッドをできるだけ小さくしますか?
数日前、私はソフトウェア工学博士号の候補者と話をしていましたが、ある時点で彼女は私に言いました。 クラスとメソッドをできるだけ小さくしてください そして、これは常に良い習慣であるのだろうか。 たとえば、クラスに属性が2つしかないことは価値があるのでしょうか?たとえば、いくつかのメソッドでは、整数のペアを使用する必要があります。「PairOfIntgers」クラスを作成する必要がありますか? この考え方は、あまりにも多くの部分でコードを「壊す」ことができますか?

9
共通のコードを集中化するためだけに関数を使用するのは良い習慣ですか?
私はこの問題に頻繁に出くわします。たとえば、私は現在、読み取り関数と書き込み関数を作成していますが、どちらもbufNULLポインターであるかどうかと、mode変数が特定の境界内にあるかどうかをチェックします。 これはコードの重複です。これは、独自の機能に移動することで解決できます。しかし、私はすべきですか?これはかなり貧弱な機能であり(あまり機能しません)、むしろローカライズされているため(一般的な目的ではありません)、単独ではうまく機能しません(場所がわからなければ必要なものがわかりません)中古)。別のオプションはマクロを使用することですが、この投稿では関数についてお話したいと思います。 それで、あなたはこのような何かのために関数を使うべきですか?長所と短所は何ですか?

12
「false」であるブール関数の引数に付けるコメントを修正しますか?
いくつかのオープンソースプロジェクトから、次のコーディングスタイルを集めました void someFunction(bool forget); void ourFunction() { someFunction(false /* forget */); } falseここで何を意味するのか、私はいつも疑っています。それは「忘れる」ことを意味しますか、それとも「忘れる」は対応するパラメーターを参照しますか(上記の場合のように)、「false」はそれを無効にすることを意味しますか? どのスタイルが最も頻繁に使用され、曖昧さを避けるための最良の方法(またはいくつかのより良い方法)は何ですか?

7
コーディングスタイルの問題:パラメーターを受け取り、それを変更し、そのパラメーターを返す関数が必要ですか?
私は友人と、これらの2つの慣習が単に同じコインの両面であるのか、それとも本当に優れているのかについて、少し議論しています。 パラメーターを受け取り、そのメンバーに入力してから返す関数があります。 Item predictPrice(Item item) 渡されたのと同じオブジェクトで機能するため、アイテムを返す必要はないと考えています。実際、発信者の観点から見ると、もしそうでない場合は、新しいアイテムを返すと期待できるので、問題を混乱させます。 彼はそれが違いを生まないと主張し、それが新しいアイテムを作成してそれを返すかどうかさえ問題ではないだろうと主張する。次の理由から、私は強く反対します。 アイテムパス(またはポインターなど)への複数の参照がある場合、新しいオブジェクトを割り当てて返すことは、それらの参照が正しくないため、重要です。 非メモリ管理言語では、新しいインスタンスを割り当てる関数はメモリの所有権を要求するため、ある時点で呼び出されるクリーンアップメソッドを実装する必要があります。 ヒープへの割り当ては潜在的にコストがかかるため、呼び出された関数がそれを行うかどうかが重要です。 したがって、オブジェクトを変更するか、新しいオブジェクトを割り当てるかは、メソッドシグネチャを介して確認できることが非常に重要であると考えています。結果として、関数は渡されたオブジェクトを変更するだけなので、署名は次のようになっているはずです。 void predictPrice(Item item) すべてのコードベース(私たちが取り組んでいる言語であるJavaではなく、明らかにCおよびC ++コードベース)で、上記のスタイルは本質的にかなり経験豊富なプログラマーによって守られ、守られています。彼は、私のコードベースと同僚のサンプルサイズは、考えられるすべてのコードベースと同僚のなかで小さいため、私の経験は優れているかどうかの真の指標ではないと主張しています。 それで、何か考えは?

3
Pythonで同じファイルに複数のクラスを入れても大丈夫ですか?
私は、長年のJavaとPHPの後、新たにPythonの世界に来ています。言語自体はかなり単純ですが、頭をかき回すことのできない「マイナーな」問題に苦労しています。 。 経験豊富なPythonの実践者にとって、この質問はばかげているように思えるかもしれませんが、言語をさらに進めるために、私は本当にそれに対する答えが欲しいです。 JavaおよびPHP(厳密には必須ではありませんが)では、ベストプラクティスとしてclassファイル名を使用して、それぞれを独自のファイルに書き込むことが期待されていますclass。 しかし、Python、または少なくとも私がチェックしたチュートリアルでは、同じファイルに複数のクラスを含めることは問題ありません。 このルールは、本番環境、展開準備の整ったコード、または教育専用コードの簡潔さのためだけに行われますか?

7
if / elseステートメントは、ケースの希少性またはそれらに対処する難しさによって整理されるべきですか?
私が今書いているコードの中には、次のようなものがあります。 if (uncommon_condition) { do_something_simple(); } else { do(); something(); long(); and(); complicated(); } 私の一部は、「それが書かれている方法で結構です。単純なケースが最初に、より複雑なケースが次に進むべきです」と考えています。しかし、別の部分は次のように述べています。「elseコードは、異常なケースを処理するifためであり、他のすべてのケースを処理するためです。」どちらが正しいですか、それとも望ましいですか?ifelse

15
私たちのコーディング標準の1つが嫌いで、それは私を狂気にさせます、それをどのように処理するのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 免責事項:タイトルが示すほど誇張されていませんが、それでも私を不快にします。私は正直に言いたいだけなので、一粒の塩でそれを取る。私が話しているコーディング標準について話しているふりをしてください。 編集:私はそれが好きではないという事実は、私はそれを使用したり、それを強制しないことを意味するものではありません。 私は、あなたが好きではない標準を乗り越える方法の精神でこの質問をすることを決めました、それがどのように変更できるかをよりよく議論する方法の助けを得るためではありません(この最後の部分に関するコメントは大歓迎です)。その上、私は大企業で働いていますが、これほど長く生きてきて、ほとんど問題にならないような変化は起こりそうにありません。 標準は、専用線の開始中かっこ標準です。 somefunction() { //... } *明らかに優れた*の代わりに(冗談/欲求不満の音に注意してください): somefunction() { //... } 標準に対する私の個人的な主張: コードが肥大化する:余分な不要な行 入力が難しい:これはおそらく私が標準に苦労しているだけかもしれませんが、余分なキーストロークがそれほど悪くないことは知っています。 読みにくい:関数宣言、ifステートメント、または他のスコープスタッキングステートメントの読み取りを開始しますが、開き括弧を探す必要はありません。この標準のネストされたブロックは、何らかの理由で私を怒らせます。 Microsoft IDEのバックグラウンドから来た人々が使用します。パラダイムによってそれを取り入れるだけでなく、標準の背後にある議論された理由(またはそれ以上)があるべきだと思います。 彼らの議論(および内部的に彼らに反論する私の方法): ブロックの開始位置と終了位置がすぐにわかるので読みやすくなります。ブロックの所有者がわからない場合、ブロックの良さはわかりません。逆読みする必要があります。 私はMicrosoft IDEでそれを使用し、それが好きでした:うーん...大丈夫? それは標準にあります:* cringes * 私は特定の基準に対して意見を述べる姿勢に苦しんでいる唯一の人ですか?、これらをどのように乗り越えましたか?この特定の基準がどうあるべきかについてのあなたの意見は何ですか?

5
よく知られているPowerShellのコーディング規則はありますか?
PowerShellでプログラミングする場合、明確に定義された規則はありますか? たとえば、長期的に維持されるスクリプトでは、次のことを行う必要がありますか? 実際のコマンドレット名またはエイリアスを使用しますか? コマンドレットパラメーター名を完全にまたは部分的にのみ指定します(dir -Recurse対dir -r) コマンドレットの文字列引数を指定するときは、(引用符で囲みますNew-Object 'System.Int32'対New-Object System.Int32 関数とフィルターを作成するとき、パラメーターのタイプを指定しますか? (公式の)正しいケースでコマンドレットを作成しますか? のようなキーワードのBEGIN...PROCESS...END場合、大文字のみで記述しますか? MSDNにはPowerShellのコーディング規約ドキュメントが欠けているようですが、そのようなドキュメントはC#などに存在します。

9
コードフォーマットのガイドラインはどれくらい重要ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 コーディング標準はどのソフトウェア開発組織でも一般的ですが、それに従うことはどれほど重要ですか?ある程度の一貫性の必要性は理解できますが、ブレースの位置、行の長さなどの単純なものを扱う場合、過度に厳しい標準がソフトウェア開発に大きく寄与するかどうかはわかりません。 事前定義された標準に準拠しているのではなく、コードが読みやすいことが重要ではありませんか?とにかくガイドラインに似ているようです。

16
他のブロックはコードの複雑さを増しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 これは非常に単純化された例です。これは必ずしも言語固有の質問ではありません。関数を作成できる他の多くの方法、およびそれに加えられる変更を無視してください。。色はユニークなタイプです string CanLeaveWithoutUmbrella() { if(sky.Color.Equals(Color.Blue)) { return "Yes you can"; } else { return "No you can't"; } } 私が出会った多くの人々、ReSharper、およびこの男(コメントから、しばらくの間これを尋ねようとしていることを思い出した)は、コードをリファクタリングして、elseこれを残すブロックを削除することをお勧めします。 (私は大多数が言ったことを思い出せない、そうでなければ尋ねなかったかもしれない) string CanLeaveWithoutUmbrella() { if(sky.Color.Equals(Color.Blue)) { return "Yes you can"; } return "No you can't"; } 質問:elseブロックを含めないことで複雑さが増しますか? 私はelse、両方のブロックのコードが直接関係しているという事実を述べることにより、意図がより直接的に述べられているという印象を受けています。 さらに、特に後日コードを変更した後は、ロジックの微妙な間違いを防ぐことができます。 私の単純化された例のこのバリエーションを取り上げます(orこれは意図的に単純化された例であるため、演算子を無視します)。 bool CanLeaveWithoutUmbrella() { if(sky.Color != Color.Blue) { …

8
Classという名前のクラス?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 これはもっとスタイルの質問ですが、私は現在私のプロジェクトについて考えています。 学校をモデル化しているアプリケーションを作成していると仮定します。したがって、Student、Schoolなどのエンティティがあります。これは(ほとんどの言語で)Class予約語であるため、Classに到達するまで、これはすべて正常で直感的です。それClassが予約されたキーワードであることを考えると、学校のクラスをモデル化するそのようなエンティティを何と呼びますか?

4
前方宣言とインクルード
Reduce the number of #include files in header files. It will reduce build times. Instead, put include files in source code files and use forward declarations in header files. これをここで読みます。http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html。 そのため、ヘッダーファイル内のクラス(クラスA)が、あるクラス(クラスB)の実際の定義を使用する必要がない場合に表示されます。そのとき、特定の(クラスB)ヘッダーファイルを含める代わりに、前方宣言を使用できます。 質問:ヘッダー内のクラス(クラスA)が特定のクラス(クラスB)の実際の定義を使用しない場合、どのように前方宣言がコンパイル時間の短縮に役立ちますか?
17 c++  coding-style 

6
ブレーク/リターンを使用したForeachループと明示的な不変条件および事後条件を使用したwhileループ
これは、値が配列内にあるかどうかを確認する最も一般的な方法です(私には思えます)。 for (int x : array) { if (x == value) return true; } return false; しかし、私が何年も前におそらくWirthやDijkstraによって読んだ本では、このスタイルのほうが優れていると言われました(中に出口があるwhileループと比較した場合)。 int i = 0; while (i < array.length && array[i] != value) i++; return i < array.length; このように、追加の終了条件はループ不変式の明示的な部分になり、ループ内に隠された条件と終了はありません。すべてがより明確で、構造化プログラミングの方法でより明確になります。私は一般的に、この後者のパターンできるだけ好ましいと使用forからだけ反復する-loopをaしますb。 それでも、最初のバージョンはそれほど明確ではないとは言えません。少なくとも初心者にとっては、さらに明確で理解しやすいかもしれません。だから私はまだどちらが良いのか自分自身に質問していますか? たぶん誰かが方法の1つを支持して良い根拠を与えることができますか? 更新:これは、複数の関数の戻り点、ラムダ、または配列自体の要素の検出の問題ではありません。それは、単一の不等式よりも複雑な不変式を持つループを書く方法についてです。 更新:OK、答えてコメントする人々のポイントがわかります:ここでforeachループをミックスインしました。これは、whileループよりもはるかに明確で読みやすいものです。私はそうするべきではありませんでした。しかし、これも興味深い質問なので、そのままにしておきます。foreach-loopと内部の追加条件、または明示的なループ不変条件とpost-conditionの後のwhileループです。条件と終了/ブレークのあるforeachループが勝っているようです。foreach-loopを使用せずに追加の質問を作成します(リンクリストの場合)。

6
長い「列」コードのために短い変数名を犠牲にしますか?
私は適切なプログラミングスキルを習得しようとするCSクラスのアマチュアプログラマーです。これが私のコードの見た目です。コードの端は103列まで拡張されています。 int extractMessage(char keyWord[25], char cipherText[17424], int rowSize, char message[388]) { int keyColumn = 0; int cipherColumn = 0; int offset = 1; int nextWord = 1; int lengthOfWord = 0; int lengthOfCipher = 0; lengthOfWord = length(keyWord); lengthOfCipher = length(cipherText); while (keyWord[keyColumn] != cipherText[cipherColumn]) { cipherColumn++; if (keyWord[keyColumn + …
17 c  coding-style 

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