VCSを使用するときにコードをフォーマットするのは悪いことですか?


24

コミットする前に、ほとんどの場合、コードを適切にフォーマットするようにフォーマットします。私のチームのほとんどは、実際には気にせず、常にコードを適切にフォーマットしません(コードに影響を与えないが、保守しようとするときの可読性に影響を与える小さなこと)。

私は最近、「保存時にフォーマット」オプションを持つVSパワーツールをインストールし、以前にフォーマットされていないファイルに変更を加えました。開発VPが私のところに来て、フォーマットのために私をre責しました。なぜなら、マージツールでは、1行または2行ではなく、ファイル全体がほとんど変更されているように見えるためです(したがって、彼は私が簡単に変更したものを正確に見ることができません)将来的に保存時にフォーマットを無効にするように言われました。私はその懸念を理解していますが、フォーマットされていないコードをソートすることは時々困難であり、IMOはとにかく常に適切にフォーマットされるべきです。気まぐれに再フォーマットするだけではないことに注意してください。しかし、コードを書くときは、パワーツールを使用するか、キーコマンドを押してテキストをフォーマットし、読みやすくします.SVNでは次のように表示されます変更。

だから私は尋ねます、常に実際にコードをフォーマットすることは悪いことですか?彼の懸念は、コードが読み取り可能であることを確認するよりも妥当ですか?


8
彼は正しいので、なぜすべてのチームにformat-on-saveツールを使用してもらわないのですか?そうすれば、読みやすく、コミットの差分を簡単に表示できる適切にフォーマットされたコードを取得できます。
gbjbaanb

12
ほとんどの優れたファイル比較ツールには、「重要でない違い」または「空白を無視する」ためのフィルターがあります。Beyond Compareのような一部のものには、言語固有のフィルターがあらかじめ組み込まれています。持っているなら、それをあなたの利益のために使ってください。
マイケルK

7
コードのフォーマットは、行われた変更と同じくらい重要です。チームにいるときは、読みやすさが最優先事項の1つでなければなりません。VPはそれを知っており、それについて心配する必要があります。
エドガーゴンザレス

@エドガー:+1。VPはあまりにもうるさいです。最初に読みやすさ...そして空白無視オプションは、これが大した問題ではないことを意味します。また、チームの他のメンバーは気にしないため、より大きな問題があることも意味します。VPはそれについてもっと心配する必要があります。
すぐに

回答:


41

最初に、チームはフォーマット規則を選択し、それに従う必要があります。あなたは合意に達し、全員がそれに固執するようにする必要があります。これは、あなたが自分で行うだけではありません。

あなたの本当の質問に関しては。コードのフォーマットは悪いことではありません。悪いのは、コードの変更と同じコミットで大きなフォーマット変更を行うことです。チームが物事をどのようにフォーマットするかについて合意に達したら、コードを1回通過させてすべてをフォーマットします。それ自体を確認してください。コミットメッセージは、変更が単なる空白であり、機能しないことを明確にします。その後、機能的な変更を行う必要がある場合、それらは異なるコミットにあるため、明確に見ることができます。


数回前のリビジョンからの変更を比較したい場合にはまだ役に立ちませんが、コード変更+フォーマット変更を一度に行うよりも優れています。もちろん、この答えはリファクタリングにも当てはまります。
gbjbaanb

1
+1:これに加えて、Stylecopまたはスタイルを自動フォーマットして強制する他のツールのようなものを使用することをお勧めします。次に、すべてのチームメンバー間で設定を同期して、書式設定が全員で一貫し、「正しい」書式ルールが何であるかを必ずしも覚える必要がないようにします。
ライアンヘイズ

3
1つのドキュメントをフォーマットしようとしたためにOPがre責された場合、StyleCopを使用することを提案できないということが何かからわかります。
ウェインモリナ

3
@gbjbaanb:はい。これが、最初にこの種の決定を行うことが最善である理由です。私が現在取り組んでいるプロジェクトでは、Eclipseフォーマッタ設定がリポジトリにチェックインされているため、全員が同じ設定を持っていることがわかります。
-unholysampler

1
@quickly_now:これが、拒否権を持つマネージャーがいる理由です。人々が同意できない場合、彼らは決定を下すことができます。
-unholysampler

29

いいえ、フォーマットコードは非常に重要です。ただし、コミットは2つのグループで行う必要があります。

  1. 外観の変更 -コードを読みやすくするもの。
  2. 他の変更 -コードに影響を与える他のすべて。

コミットメッセージを使用して、化粧品のみが変更されたことを示します。より実質的な変更を検索する場合、これらは簡単にスキップできます。


3
また、チーム間で特定の書式設定規則を決定することもお勧めします。最初にこれについて議論せずに、他の人からのコードをフォーマットするだけではありません。
スティーブンジュリス

ええ..しかし、あなたは知っている、時にはそれが「あなたがそれにいる間に」とてつもない混乱をフォーマットすることは非常に魅力的です。また、VSを使用して何かを自動的にフォーマットする場合、外観上の変更と機能上の変更を区別しようとするのは面倒です。ああ、コミット履歴を見ることで非常に重要なタスクを実行している間に、あなたが愚かなフォーマットをしていると言う人は誰もいません
-Dyppl

10

両方にポイントがありますが、両方ともあなたがほしいものを手に入れることができます。最初にコードをフォーマットし、その変更のみをチェックインします。次に、機能の変更を行い、2番目のステップとしてチェックインします。


3
これは現在の状況に最適なソリューションだと思いますが、チームと話し合う必要があります。ただし、コーディング標準がないという大きな問題があります。
トーマスオーエンズ

2
同意した。OPの環境は、標準が「素早く物事をクランクアウトする」ことを避けているカウボーイの場所の1つであるのだろうか。
ウェインモリナ

4

私も書式設定の専門家なので、ここにいくつかのヒントを示します。

  • 必須の最初のステップ:タブ対スペース、ブレースの位置、コメントスタイルなど、いくつかの基本的なフォーマットの標準についてチームに同意してもらいます。つま先に。

  • 変更したコードの周りのフォーマットのみをクリーンアップします。1つの関数だけを変更する場合は、その関数をクリーンアップしてください。少なくとも時間が経つにつれて、コードの見栄えが良くなります。

  • 他のコードを変更せずに、主要なフォーマットのオーバーホールを別個のコミットとして実行します。変更後のコードと変更前のコードを比較する可能性が低い場合にのみ、これらを実行する必要があります。私は通常、そのコードの大規模な開発の前に最初にクリーンアップを行います。

  • 重要な変更と重要でない変更の言語依存のマーキングを実行できる優れたdiffツールを入手してください。私のお気に入りの比較Beyond Compareは、実際のコードの変更をある色でマークし、空白/コメントを別の色でマークします。

もう1つのヒントを編集します。

  • 言語によって言語は異なりますが、コードの実際の表面的な変更については、大規模なクリーンアップの前後にコンパイル済みのバイナリを比較して、完全に削除されていないことを確認できる必要があります。

バイナリ(またはビルド情報)にVCタグを含めない限り。
-Vatine

2

次の場合を除き、他の人のコードを再フォーマットして変更をコミットすることはできません。

  • あなたはチームのコーディング標準を確立しようとしているマネージャーです
  • チームのコーディング標準に準拠するために、マネージャーからコードをクリーンアップするように依頼されました
  • チームのコーディング標準を遵守するために、チームにいない開発者からコードをクリーンアップしています。

すべての場合において、私がチームのコーディング標準を参照していることに気付くでしょう。私は、チームの合理的で合意されたコーディング標準を強く信じています。それらがある場合、元の開発者は戻ってチームの標準に準拠するためにコードをクリーンアップする必要があります。あなたは彼らの後ろでそれを行うべきではありません。あなたが標準を持っていない(そしてそうするべきである)なら、あなたの哲学、特に彼らの後ろに固執するために、他のチームメンバーのコードを修正するべきではありません。あなたはチームの一員であり、コーディング標準は重要ですが、チームメンバー間の信頼と尊敬も重要です。


「彼らの背中の後ろ」:これは、コードの所有権(または開発芝生戦争)の心理的な問題に戻ります。
-rwong

2
「他の人のコード」は興味深い言い方です。私は、自分の会社が所有するコードからコンパイルされた、会社の製品に取り組んでおり、チームのメンバーと私はそれに取り組んでいます。それに取り組んでいる間に標準にそれを修正することは決して彼らの後ろにありません。ただし、元の開発者が標準に合わせてクリーンアップすることが理想的なソリューションであることに同意します。
カレブホイット-cjhuitt 11年

@カレブ:彼らはただのゴミを平らにすると難しいです。
すぐに

「他の人のコード」とは、所有権を意味するのではなく、彼らが書いたものであり、彼らがまだ支援する責任があると信じていることを意味します。コーディング標準がない場合、1,000行のコードでクラスを実装し、いくつかの動作を修正してファイル全体を再フォーマットするために2行に変更を加えると、ファイルを開いたときに非常に驚かされます。チームのメンバーとして、お互いにそうすべきではありません。完全に再フォーマットしてそのファイルをチェックインし、私に頭を上げさえしないなら、それはあまりチームフレンドリーではありません。
cdkMoose

OPの最初の議論で、私はそれがコーディング標準のない(または十分に実施されていない)環境であると読んだので、そのように答えました。その環境では、ある開発者が自分の標準を他の開発者に課すべきではありません。
cdkMoose
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.