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

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

12
内部構造がある場合、長い関数は受け入れられますか?
ネストされた関数(PythonやDなど)をサポートする言語で複雑なアルゴリズムを扱う場合、私はしばしば(アルゴリズムが複雑なため)巨大な関数を記述しますが、ネストされた関数を使用して複雑なコードを構成することでこれを緩和します。ネストされた関数を使用して内部的に適切に構造化されていても、巨大な(100行以上の)関数は依然として悪と見なされますか? 編集:PythonまたはDに精通していない人のために、これらの言語のネストされた関数は、外部関数スコープへのアクセスも許可します。Dでは、このアクセスにより、外部スコープ内の変数の突然変異が許可されます。Pythonでは、読み取りのみが許可されます。Dでは、宣言することにより、ネストされた関数の外部スコープへのアクセスを明示的に無効にできますstatic。

7
CおよびC ++で符号なし整数を使用する
長い間私を困惑させる非常に簡単な質問があります。私はネットワークとデータベースを扱っているので、扱うデータの多くは32ビットと64ビットのカウンター(符号なし)、32ビットと64ビットの識別IDです(また、符号の意味のあるマッピングはありません)。私は、負の数として表現される可能性のある実際の単語の問題を実際に扱うことは決してありません。 私と私の同僚は、これらの問題のためにuint32_t、通常、符号なしの型uint64_tを使用します。頻繁に発生するため、配列インデックスや他の一般的な整数の使用にも使用します。 同時に、私が読んでいるさまざまなコーディングガイド(Googleなど)は、符号なし整数型の使用を推奨しておらず、JavaとScalaのどちらにも符号なし整数型がないことを知っています。 ですから、私たちの環境で署名された値を使用するのは非常に不便であると同時に、コーディングガイドがまさにこれを行うことを主張する正しいことを理解できませんでした。
23 c  coding-style 

5
再フォーマットとバージョン管理
コードのフォーマットが重要です。インデントさえ重要です。そして、小さな改善よりも一貫性が重要です。ただし、プロジェクトには通常、1日目から明確で完全で検証可能で強制的なスタイルガイドがなく、大きな改善がいつでも届きます。たぶんあなたはそれを見つける SELECT id, name, address FROM persons JOIN addresses ON persons.id = addresses.person_id; /として書かれた方が良い SELECT persons.id, persons.name, addresses.address FROM persons JOIN addresses ON persons.id = addresses.person_id; クエリに列を追加する作業中。これは、コード内の4つのクエリすべての中で最も複雑なものか、数千ものクエリの中でささいなクエリかもしれません。移行がどれほど困難であっても、価値があると判断します。しかし、主要なフォーマットの変更全体でコードの変更をどのように追跡しますか?あきらめて「これが私たちが再び開始するポイントです」と言うか、リポジトリ履歴全体のすべてのクエリを再フォーマットすることができます。 Gitのような分散バージョン管理システムを使用している場合は、最初のコミットに戻り、そこから現在の状態に変更できます。しかし、それは多くの作業であり、作業中は他のすべての人が作業を一時停止する必要があります(または、すべてのマージの母親に備える必要があります)。すべての結果の中で最高のものを提供する履歴を変更するより良い方法はありますか? すべてのコミットで同じスタイル 最小限のマージ作業 ? 明確にするために、これはプロジェクト開始時のベストプラクティスに関するものではなく、大規模なリファクタリングがGood Thing™と見なされたが、追跡可能な履歴が必要な場合に何をすべきかを示しています。バージョンが常に同じように動作することを保証する唯一の方法である場合、履歴を書き換えることは素晴らしいことではありませんが、クリーンな書き換えの開発者の利点はどうですか?特に、書き換えたバージョンが元のバージョンとまったく同じように機能することを保証する方法(テスト、構文定義、またはコンパイル後の同一のバイナリ)がある場合はどうでしょうか?

6
関数パラメーター名の前にp *を付ける利点は何ですか?
関数パラメーターの前にを付けたプロジェクト(Eclipseを使用するJavaプロジェクトおよびチーム)をよく見ますp。 例えば public void filter (Result pResult) ... 私は個人的にはこれには何の利点も見ていませんが、その理由は何か知りたいです。私が聞いた中で最も良い説明は、同じ名前のフィールドの名前を区別することだということです。その説明には問題がありますが、ポイントは理解できます。

10
null値を許可する型はマジックナンバーよりも望ましいですか?
私は最近、同僚と少し議論をしています。具体的にはC#を使用していますが、これはnull許容型を持つ任意の言語に適用できます。たとえば、最大値を表す値があるとします。ただし、この最大値はオプションです。nullableな数値が望ましいと主張します。私の同僚は、先例を引用してゼロの使用を支持しています。確かに、ネットワークソケットなどでは、無制限のタイムアウトを表すためにゼロがよく使用されています。今日ソケットを処理するコードを作成する場合、タイムアウトがないという事実を表す方が良いと思うので、個人的にnull値を使用します。 どの表現が優れていますか?どちらも「なし」を意味する値の条件チェックを必要としますが、null許容型は意図を少し良く伝えると信じています。

15
すべての関数/メソッド引数を新しい行にリストするのは悪い考えですか?なぜですか?
私は、関数を呼び出すたびに引数を新しい行に置く人と仕事をしています。 aFunction( byte1, short1, int1, int2, int3, int4, int5 ) ; コードが非常にコンパクトではないことを意味するため、これは非常に迷惑です。したがって、実際にロジックを理解するには、さらに上下にスキャンする必要があります。これが実際に悪い慣行であるかどうかを知りたいのですが、もしそうなら、どうすれば彼らにそれをしないように説得できますか?

6
sizeofスタイル:sizeof(type)またはsizeof変数?
sizeofメモリ関連の操作(in memsetやなどmalloc)に使用する2つのスタイルを見てきました。 sizeof(type)、そして sizeof variable または sizeof(variable) どちらを好むか、2つのスタイルを組み合わせて使用​​しますか。また、各スタイルをいつ使用しますか。各スタイルの長所と短所、およびそれらを使用するときは何ですか? 例として、一方のスタイルが役立ち、もう一方のスタイルが役立たない次のような状況を見ることができます。 ポインターの間接指定が間違っている場合: type *var; ... memset(var, 0, sizeof var); /* oops */ タイプが変更されたとき: new_type var; /* changed from old_type to new_type */ ... memset(&var, 0, sizeof(old_type)); /* oops */
22 c  coding-style 

5
自明ではない条件文をループの初期化セクションに移動する必要がありますか?
stackoverflow.comのこの質問からこのアイデアを得ました 一般的なパターンは次のとおりです。 final x = 10;//whatever constant value for(int i = 0; i < Math.floor(Math.sqrt(x)) + 1; i++) { //...do something } 私がやろうとしているのは、条件付きステートメントが複雑なものであり、変わらないということです。 ループの初期化セクションで宣言する方がいいですか? final x = 10;//whatever constant value for(int i = 0, j = Math.floor(Math.sqrt(x)) + 1; i < j; i++) { //...do something } これはもっと明確ですか? 条件式が次のように単純な場合 final …

6
科学的コードは、一般的なコーディング標準を無視するのに十分な領域ですか?
最近、次の事実について心を包もうとしています。 一方では、「健康」、「クリーン」、「よく書かれた」などのコードと見なされるものについて、コーディングのガイドラインと標準が多数あります。ここでも広く議論されているように見える「クリーンコード」を参照してください。ルールの例:7行の長いメソッドと1または2レベルのインデント。従わないコードは、どういうわけか保守性が悪いために死ぬことが予想されます。 一方で、OpenCV、OpenCascade、VTKなどと連携するようになりました。これは科学的なコードです。彼らは2ページの長いメソッドを持っています(私自身)、OpenCascadeには10個のファイルに分割されたメソッドまたはクラスがあります(ここではジョークはありません)、VTKも混乱することがあります。しかし、これらのプロジェクトは繁栄し、維持され、広く使用されています! キャッチはどこですか?科学的で数学が重いコードを、それが機能するように書くことは許されていますか?あなたは、もしあれば、そのようなプロジェクトのための独立した標準のセットですか? 素朴な質問かもしれませんが、私は物事を行う方法としない方法を設定しようとするプログラミングの無効のようです。これは高校で働くことを教えられた方法です。私は卒業して以来、私がやらなければならないこと、主にプログラミングについてのガイドラインのサポートがほとんどありませんでした。

5
コンストラクタをどのように分解できますか?
私にはEnemyクラスがあり、コンストラクタは次のようになります。 public Enemy(String name, float width, float height, Vector2 position, float speed, int maxHp, int attackDamage, int defense... etc.){} コンストラクターには非常に多くのパラメーターがあるため、これは悪いように見えますが、Enemyインスタンスを作成するときは、これらすべてを指定する必要があります。また、これらの属性をEnemyクラスに含めて、それらのリストを反復処理し、これらのパラメーターを取得/設定できるようにします。EnemyをEnemyB、EnemyAにサブクラス化して、maxHpなどの特定の属性をハードコーディングすることを考えていましたが、Enemyのリスト(EnemyA、EnemyB、およびEnemyC's)。 私はただきれいにコーディングする方法を学ぼうとしています。違いがあれば、Java / C ++ / C#で作業しています。正しい方向の任意のポイントが高く評価されています。

3
連続する単語に数字があるキャメルケースの方法は?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 このコーナー・コーナー・コーナーのケースで誰かが従うべき良い慣習があるかどうか疑問に思っています。私は実際にJavaを使用していますが、C#の人々もいくつかの良い洞察を持っているかもしれないと考えました。 クラス名の2つの連続した単語が数字であるクラスに名前を付けようとしているとします(同じ質問で識別子名について尋ねられることに注意してください)。良い例は得られませんが、「IEEE 802 16ビット値」のようなものを考えてください。 連続した頭字語の組み合わせは、などのクラス名を受け入れる場合に実行可能ですHttpUrlConnection。しかし、クラスに名前を付けることを考えると、真剣に少し私を投げますIEEE80216BitValue。選択しなければならなかった場合、IEEE802_16BitValueそれは悪い間違いのように見えるよりもさらに悪いと言うでしょう。少数の場合、私は検討したいIEEE802SixteenBitValueが、それはうまくスケーリングしません。 誰もがコンベンションを持っていますか?Microsoftの命名ガイドラインは、頭字語の命名を仕事を遂行するのに十分なほど詳細に説明している唯一のガイドラインのようですが、クラス名の番号については誰も言及していません。

4
メソッドチェーンを使用してオブジェクトを構築するイディオムの名前は何ですか?
メソッドチェーンを使用してオブジェクトをセットアップするパターンを頻繁に使用しますが、Builderor Prototypeパターンに似ていますが、各メソッド呼び出しで新しいオブジェクトを作成せず、代わりに元のオブジェクトを変更します。 例: new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner"); このパターンに名前があるのか​​、それがアンチパターンと見なされるのかどうか疑問に思うだけです。なぜなら、より流に読むことができても、長いメソッドチェーンにつながる可能性があるからです。

12
「Do One Thing」パラダイムが有害になるのはいつですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 引数のために、指定されたファイルの内容を行ごとに出力するサンプル関数を次に示します。 バージョン1: void printFile(const string & filePath) { fstream file(filePath, ios::in); string line; while (std::getline(file, line)) { cout << line << endl; } } 関数は、抽象化の1つのレベルで1つのことを行うことが推奨されることを知っています。私にとっては、上記のコードはほとんど1つのことを行い、かなりアトミックです。 一部の書籍(Robert C. MartinのClean Codeなど)では、上記のコードを個別の機能に分割することを提案しているようです。 バージョン2: void printFile(const string & filePath) { fstream file(filePath, ios::in); printLines(file); } void …

9
LINQスタイルの設定[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は毎日のプログラミングでLINQを使用するようになりました。実際、明示的なループを使用することはほとんどありません。しかし、構文のようなSQLはもう使用しないことがわかりました。拡張機能を使用するだけです。ではなく、言って: from x in y select datatransform where filter 私が使う: x.Where(c => filter).Select(c => datatransform) どのスタイルのLINQを好みますか?また、チームの他のどのスタイルに満足していますか?
21 c#  coding-style  linq 

3
Groovyで明示的なreturnステートメントを記述するタイミング
現時点では、Groovy / Grailsプロジェクト(私はまったく新しい)に取り組んでおりreturn、Groovyメソッドでキーワードを省略するのは良い習慣かと思います。私の知る限り、キーワードを明示的に挿入する必要があります。つまり、ガード句の場合、他のどこでも使用する必要がありますか?私の意見では、追加のreturnキーワードは読みやすさを向上させます。それとも、あなたはただ慣れなければならないものですか?そのトピックに関するあなたの経験は何ですか? いくつかの例: def foo(boolean bar) { // Not consistent if (bar) { return positiveBar() } negativeBar() } def foo2() { // Special Grails example def entitiy = new Entity(foo: 'Foo', bar: 'Bar') entity.save flush: true // Looks strange to me this way entity }

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