開発チームでさまざまなコーディングスタイルをサポートする方法はありますか


13

問題:2人の開発者=>インデントに関する3つの意見、改行の有無など

私たちは通常、プロジェクトで3人または4人で作業し、それぞれに独自のコードスタイルがあります。共通の解決策はコードスタイルに同意することであり、誰もが使用する必要がありますが、クリエイティブプログラマーにそれらに合わない訴訟を強いることは望みません。

質問は次のとおりです。各プログラマーが独自のスタイルを生きながら、リポジトリ内に共通のコードベースを持っている方法はありますか?私は、いくつかのgit / svn / whateverプラグインについて考えます。これは、チェックアウト時とコミット時に個人的なスタイルと一般的なスタイルの間で変化します。このアプローチのトリッキーな部分は、ファイルのバージョン間の正しい差分をサポートすることであるように思えます


1
ほとんどの言語で使用可能な自動コードフォーマッタがありますが、一部の言語(C ++など)では、言語の解析が複雑であるため、完全に信頼できるものにすることは非常に困難です。
ジョリスティマーマンズ

5
本当に悪い考えです。チームに合意の基準を考えてもらい、それを適用させます。ワインがあれば、少し成長するように伝えます。
クレメントヘレマン

8
他の非常に一般的な発言をここで行う必要があるかもしれません:コードスタイルの違いに実際の問題がありますか?壊れていないものを修正しないでください!
ジョリスティマーマンズ

5
「しかし、クリエイティブなプログラマーに自分に合わないスーツを強制したくはありません」-プログラマーがインデントやブレースのスタイルの変更などの単純なものに適応できない場合、より良い開発者を雇う必要があります。新しいスタイルを1、2週間使用すると、忘れてしまいます。
マイクウェラー

4
@MikeWeller反対を主張することができませんでしたか?命名規則は、定義コンテキスト外で物の目的を簡単に識別できるようにするため、私がこれまで重要と考えてきた唯一のものです。ブロックのネスト、開始、終了の場所を明確にするために誰かが半一貫してスタイリングしている限り、なぜそんなに大事なのか理解できませんでした。
エリックReppen

回答:


20

いいえ、標準を作成する必要があります。チームメンバーBが(自動IDEツールを使用して、または手動で)変更した場合、チームメンバーAが作成したコードのヒープ全体がコミットされ、変更として表示されます。

これはほとんどすべてのチームが直面しているものであり、この理由から標準は「強制」されています。言語当局の基準をベースラインとして、チームに合わせて採用することをお勧めします。

一貫したコーディングスタイルを持つことは、プロジェクトの保守性にも役立ち、コードに取り組んでいる新しい人々の参入障壁を減らします。


11

いいえ、コーディング標準(できれば既存のもの)を定義し、開発者にそれを遵守させる必要があります。プロのプログラマーであるということは、作業中のプロジェクトで使用されているコーディング標準に適応できることを意味します。


2
+1。彼らに1つを選ばせますが、それを適用させます。
クレメントヘレマン

フォーマットがプログラミング言語の標準の一部であり、プログラムが「有効」または「無効」であるだけでなく、「有効で適切にフォーマットされた」第3の状態を持つことを望みました。
JesperE

4
(多かれ少なかれ)Pythonの場合です。インデントは言語セマンティックです。
クレメントヘレマン

2
Goは厳密にそのようなことを強制するものではありませんが、組み込みのソースコードフォーマッターが付属していgo fmtます。参照してくださいgolangtutorials.blogspot.fr/2011/06/...
クレメントHerreman

1
@JesperEこれPEP8および対応するツールを使用してPythonで実装され、独創的な名前はpep8です。
フィハグ

8

はい、スタイルがすべて理にかなっており、他の人のコードを好みに合わせて変更したり、スタイルを単一のコードファイルに混在させたりしない限り、機能します。
理想的ではありませんが、作成された古いコードを自分の「標準」とは異なるものに継承し、コードベースと統合する必要があることと違いはありません。
あなたがそれをしなければならない場合、いくつかのガイドライン:

  • 好みに合わせて異なるスタイルのコードを変更する必要はありません。時間がかかり、バグが発生します
  • 単一のファイル内で一貫性を保ちます。したがって、スタイルAを最初に記述するために使用された場合、誰もがスタイルAを変更するときに使用します
  • パブリックインターフェイスの共通標準を作成して、外部に公開されるすべての要素を作成します(そして、はい、システムの他のサブコンポーネントは外部です)。

2
とにかく、プロの開発者はお互いのスタイルをとにかくマージする傾向があることを付け加えます。彼らはいくつかの点について短い非公式の議論を行い、合意に達するでしょう。
ジョリスティマーマンズ

自動コード再フォーマットの使用は最小限に抑える必要があるという警告があります(完全に禁止されていない場合)。
グラハムパーク

2
「好みに合わせて異なるスタイルのコードを変更することはありません。時間がかかり、バグが発生します」-まったく逆-手作業で自動化されていない標準に合わせるのは非常に時間の無駄です。コードフォーマッタを実行し、「オプションでフォーマット済み。 "その後、はるかに高速で、機能の変更を行うものは何でも
ピートKirkham

この答えは、実際には質問の「自動フォーマット」の部分を見逃しているのではないかと思います。
ジョリスティマーマンズ

ファイル間のさまざまなスタイルは、単に一貫したスタイルを持つよりも対処がはるかに困難です。
アンディ

4

短い答えはいいえです。

特にソフトウェア開発などの知識ベースの仕事では、仕事で意見を評価する必要がありますが、開発者は意見が単なる意見であり、どの行インデント標準が最適であるかを議論しないソフトウェアを書くためにそこにいることを認識しなければなりません。

標準文書の目標は、対処する共通のコーディング標準/規約のセットを実施/提案することです。

  1. タブ、インデント、{、(の使用などのレイアウト項目
  2. 変数、オブジェクト、関数名、つまりキャメルケース、ハンガリー語表記
  3. 例外処理方法/いつ/どこで実行されるか
  4. コードのコメント。常に設計ドキュメント、バグ番号などを参照していますか

標準ドキュメントは、コードが読みやすく、保守しやすく、規約に一貫性があることを保証するのに役立ちます。

これは、チェックイン前にコードをレビューしたり、他の人のコードをデバッグしたり、元の開発者が会社を辞めてから数年後にコードを変更したりする場合に非常に役立ちます。

通常、コーディング標準文書を作成するときは、使用している言語(C、C#、SQL)の業界標準を確認し、最も適切な標準を使用し、コメントのために最も上級/影響力のある開発者に配布し、必要に応じてコメントを組み込みます。ドキュメントをリリースします。


1
実際には、多くのショップには、通常はオールドハンドまたはPrimaDonnaである開発者が1人います。これらの開発者は、残りの人々が対処するために、聖なるフォーマット戦争を作成することに喜びを感じています。プロフェッショナル==私が言うことは何でも。あなたが言うことは何でも==非専門家。そしてそれは委譲されます。「多くのグローバル変数を使用し、新しいクラスを作成せず、オブジェクト指向プログラミングをすべてのコストで回避し、何も変更しない」などの大まかなことを義務付けるコーディング標準を見てきました。悲しいことに、人々が「コーディング標準」と呼ばれるものの範囲に詰め込もうとするものに制限はありません。
ウォーレンP

4

理論的には、バージョン管理システムにコミットされる前にコードを自動的に再フォーマットすることは可能です。

ただし、1つの大きな問題があります。自動コードフォーマットツールは100%信頼性がありません。したがって、実際にこのシステムでコードに問題を引き起こす可能性があります。私の考えでは、それはアイデアを殺します。適切にスタイル設定されたコードよりも機能的なコードを使用することが常に重要です!

プロジェクトが区分化されていて、コードのほとんどの部分が個々のプログラマーによって「所有」される傾向がある場合は、独自のスタイルを(理由の範囲内で)使用しても構いません。ただし、複数の人が同じコードで頻繁に作業している場合は、おそらくスタイルを強制する必要があります。

Stack Overflowに関する同様の議論があります。


2
リンクされたディスカッションの受け入れられた答えにも注意してください!
ジョリスティマーマンズ

1

次の場合は、一方向の自動再フォーマットコードが実行可能なソリューションである可能性があります。

  1. 実装したい規則とプログラミング言語で実際に機能するオートフォーマッタを見つけてください。
  2. 事前にコミットして、再フォーマットが実際の機能変更と混同されて区別できない変更ログに表示されないようにすることができます。
  3. 少なくとも、私が知っている限りではないが、開発者の個人的な好みにチェックアウトする際に「戻る」ことができないため、どの規約を適用すべきかをチームに同意させることができます。

多くの場合、これらはどれも簡単に実行できるものではないため、ここで戦闘を選択することを検討してください!開発者のPCで既に再フォーマットが行われているC#/。NETプロジェクトに対して、チームがこれを正常に実行するのを見てきました。そのため、状況によっては可能です。


1

絶対にできます。その小さなものを発汗しないことについてのすべて。

重要な唯一の標準は、「変更を既存のコードと同じスタイルに保つ」ことです。好みのものではないコーディングスタイルに身を任せることができれば、どのコーディングスタイルでも作業できます。

それで、同じ会社内で3つの異なるスタイルで働くことの大したことは何ですか。あなたの開発者は、方法、彼らのようにコードを書くことが自分のコードのために見つけることですが、彼らは別のスタイルを使用して別のファイルに変更を加えた後、彼らは、このことを理解する必要がある必要があり、そのスタイルを維持するために(またはそれは本当に悪い見ていきます) 。再フォーマットは許可されていません(または継続的に再フォーマットしているだけなので、scm diffは役に立たないでしょう)(これを行う場合は、自動フォーマットを採用する必要があります)。

チャンスは、一度これを使用すると、どのスタイルを使用するか、またはほとんどの場合スタイルが一緒にドリフトするかについて、コンセンサスが得られることです。彼らがそれについて子供っぽくなり、常にお互いのコードを再フォーマットする場合は、インターネットから標準をダウンロードして、それを使用するよう要求する時が来ます。とにかくこれをやりたいと思うかもしれません、彼らの顔に「ナイスプレイまたはその他のプレイ」カードとしてそれを振るだけです。

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