モジュールの変更/追加中に別の開発者コードを再フォーマットしても大丈夫ですか?


13

グループ環境で開発し、一部のコードベースで機能を追加または変更しているとき。以前の開発者のコ​​ードを再フォーマットして現在のコーディング標準に合わせるのは不快または失礼と見なされますか?標準が変更され、おそらく変更され続けることを理解していますが、誰かがコードフォーマットを変更して変更した場合、あなたは気分を害するでしょうか?

明確にするために、タブやスペースなどをいじるだけで、ロジックの変更については話していません。

編集:コーディング標準のためにこれを行うだけでなく、コードを読んで最新にするので、重要なアプリケーションの変更を開始する前に実装されたロジックを完全に理解できます。


6
全員の自動「保存時のフォーマット」を有効にします。誰もが同意した同じ設定を使用します。しばらくすると、すべてのコードが正規化されます。

1
これは遠いところまで行くことができます。私は、必要なラインブレークを追加したり、関係する限り関連のないラインブレークを追加したりするすべてを再フォーマットした同僚がいました。個人的には、それが判読できない場合、またはコードが私の主な責任となった場合を除き、他の変更を加えない限り、書式設定はそのままにします。
-SoylentGray

1
C#でコーディングしている場合は、StyleCopに固執します。他の言語の場合は、適切で公平なツールを選択してください。
ジョブ

5
これは「ので、私は...書式設定変更していますされて、私はそれが異なって見えるべきだと思う」..または、この「私は、書式設定...あまりにも一致変えるよさの基準を ...非常に異なる質問」
WernerCD

1
@Thorbjornすべてのファイルのフォーマットを修正するブランチ、コミットごとに1ファイル、履歴を削除することは考えません。ただし、同じコミット中に修正するのは悪いことです。(私は彼らのようなものを使用することができると思いgit add部品をコミット選択的に、私の推測では、ほとんどの人が同等の使用ということであるsvn commitgit commit -a)を
代替

回答:


19

基準が合意されている限り、これは問題ないと思います。ただし、注意点が1つあります。ファイルが他のユーザーによって同時に変更されている可能性がある場合は注意してください。書式設定を変更しただけでマージを難しくすると、あまり人気がありません。


10
ここの最初の文は重要です。気に入っているからといって変更を加えるだけでなく、実際に合意した基準に従っていることを確認してください。
トーマスオーエンズ

5

はい、コードはプロジェクトに属している必要があります。コードを標準に引き上げることで、プロジェクトの技術的な赤字を減らすことができます。変更する場合は、現在あなたが責任を負います。古いコードの場合、元の開発者はプロジェクトに参加していないか、新しい職務に就いている可能性があります。

この種の変更を行う場合、再フォーマット後に検証テストを実行することをお勧めします。合格した場合は、機能の変更を行う前にコードをチェックインします。

編集:この質問の文脈では、標準への再フォーマットが適切です。標準がない場合は、標準を推奨し、形式の標準があるまで再フォーマットしないことをお勧めします。プロジェクトに属するコードを使用して、個人の好み/標準に再フォーマットすることはできません。


2
「機能の変更を行う前にコードをチェックインする」ための+1
bdoughan

1
「機能の変更を行う前にフォーマットの変更をチェックインする」と「再フォーマット後に検証テストを実行するのが良い」ためにもう一度+1。理想的には、各チェックインの前に検証テストを実行する必要があります。
leed25d

実際、変更の前または後に再フォーマットするかどうかは実際には問題ではありません。重要なのは、審美的なパッチを機能的なパッチとは別に保つ必要があることです。>>審美的なパッチが機能を変更した場合、それは意図されておらず、バグと見なすことができます。機能的なパッチのレビューが簡単になります(より小さいため)。
マチューM.

@Matthiew M:本当ですが、ほとんどの場合、メンテナンスの前に保守性を改善するために最初に行われます。事後、そうする時間を持つ開発者はほとんどいません。また、自動チェックインテストに合格するためにコードをアップグレードする必要がある場合は、美的なパッチと機能的なパッチの分離を維持するために、最初に再フォーマットする必要があります。
-BillThor

3

特定のファイルを変更/追加するときにコードをリファクタリングすることは常に良い習慣だと思います。これには、変数/メソッドの適切な命名規則とコーディングスタイルを反映するようにコードのスタイルを更新することが含まれます。


OPは、リファクタリングではなく、再フォーマットについて質問しました。
quant_dev

知っている; 再フォーマットも含めると考えていると言いました:)
ウェインモリナ

2

私はいつもこれをしています。古いコードは新しいコードと同じ標準に準拠する必要があり、作業中に修正しなければ誰も修正しません。これはボーイスカウトルールにも当てはまると思います。


2

これは良い習慣であり、コード保守の必要な部分だと思います。

バージョン管理システムへの1回のコミットでフォーマットの変更をチェックインし、別のコミットで機能の変更をチェックインすることをお勧めします。


1
個別のコミットの場合は+1。コードが同時に再フォーマットされたときにコミットでどのコード変更が行われたかを把握しようとするのはPITAです。ファイル内のすべての行が変更されている場合、差分ツールは役に立ちません。
デイブカービー

2

私はそれについて何の問題も持たず、おそらく感謝するでしょう...変更が「宗教的」でない限り。すべてのクラスを調べて、中括弧をメソッドの最初の行に移動しないでください。フォーマットが正当な「異なる人々のための異なるストローク」タイプのものである場合、誰かが入って最も頻繁に編集するコードにフォーマットを課すとき、それは少し面倒です。ただし、その特定のモジュールの主要なエディターになった場合は、適切なフォーマットの変更を行ってください。


1

はい。適切と思われるコードを「修正」してください。Pragmatic Programmersが本The Pragmatic Programmerで言っているように、壊れたウィンドウはありません。コードが標準に達していない場合、私はそれを壊れたウィンドウと見なします。


1

ソースを取得するプラットフォームに応じて、チェックイン時に自動的に再フォーマットを実行するさまざまなリポジトリや、取得時にCR / LFペアリングを変更するような小さなものがあります。

独自の再フォーマットを行うことには大きな欠点があります。デルタのチェックは大量の再フォーマットによって難読化され、回帰の問題がある場合は問題のあるコードブロックを見つけるのが難しくなります。

コードベースが古いため、コードベースを一度にまとめて現在の標準に再フォーマットし、どこにでもコードの明るい未来をもたらすことをリードに提案できます。


1

あなたは純粋に「フォーマット」の問題を話しているので(バグを修正するのではなく、自分の基準に合わせて見栄えを良くすることを意味します)、元の人がまだコードを維持しているかどうかに依存すると思います。

創始者がまだプロジェクトに取り組んでいる場合-それは失礼です。あなたにとって「見える」かもしれないのは、彼らにとって「見える」ということではなく、フォーマットのためにコードを修正することは丁寧ではありません。また、多くの時間を無駄にする可能性があります。

私は非常に所有権のある開発者と一度プロジェクトに取り組んでいました。長年にわたって、コードをフォーマットする非常に系統的な方法を開発してきましたが、これは読みやすく、暗黙のミスが少なく、自己文書化が容易だと感じています。一方、この男は、300文字幅に広がる長い行を持つすべての暗黙の機能を使用することを好み、読みやすさよりも行数の方が重要であると考えたため、30インチモニターを読む必要がありました。私のコードを吹き飛ばして彼の「好みの標準」に変えました...私はまだ並行して開発を続けていました!翌朝、彼の混乱に合わせてフォーマットされた2日間の作業を見つけました。

開発者がいなくなって、あなたが「より良いスタイル」を手に入れたら。


0

IDEで可能な場合は、常にコードを自動フォーマットします。

  • 手動でのフォーマットの変更により、長期的にバージョン履歴が乱雑になるのを防ぎます
  • フォーマッタープロファイルは、すべての開発者の間で同意する必要があります(デフォルトを選択しますか?)
  • ファイルを保存するときに、書式設定コードとインポートの整理を習慣にする

たとえば、Eclipseでは、最初にフォーマッターを実行し、コードベース全体のインポートを整理できます。次に、保存する前にctrl + alt + fを忘れないでください。

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