24

私は最近、当社に一連のコーディング ガイドラインがあることを発見しました (ドキュメント管理システムに隠されているため、誰も見つけることができません)。それは一般的にかなり賢明に見え、「{」をどこに置くか、ハードタブを使用するかどうかについての通常の宗教戦争から遠ざけます. ただし、「行に複数のスペースを埋め込んではならない」ことを示唆しています。つまり、このようなことをしないでください。

foo    = 1;
foobar = 2;
bar    = 3;

またはこれ:

if      ( test_one    ) return 1;
else if ( longer_test ) return 2;
else if ( shorter     ) return 3;
else                    return 4;

またはこれ:

thing foo_table[] =
{
  { "aaaaa", 0 },
  { "aa",    1 },
  // ...
}

これは、1 つの行を変更すると、多くの場合、すべての行を編集する必要があるためです。これにより、変更がより困難になり、差分を理解するのが難しくなります。

私は引き裂かれています。一方では、このように並べると、繰り返しコードが読みやすくなります。一方で、差分が読みにくくなります。

これについてどう思いますか。

4

14 に答える 14

29

2008: 私はソース コードの毎日のマージを監督しているので、... 反対することしかお勧めできません。

それはきれいですが、定期的にマージを行う場合、「読みやすい」という利点は、そのコードのマージに伴う労力よりもはるかに少なくなります。

この形式は簡単な方法で自動化することはできないため、これに従わない最初の開発者は重要なマージをトリガーします。

ソースコードのマージでは、差分ツールにスペースを無視するように要求できないことを忘れないでください。
そうしないと、差分中に "" と " " が同じに見えるため、マージは必要ありません... コンパイラ (および追加したコーダー)文字列の二重引用符の間のスペース) はそれに同意しません!

2020年:マルコのコメントに記載されているように

ほとんどのコード マージャーは空白を無視して処理できるはずであり、等号の整列はほとんどの IDE で自動フォーマット オプションになりました。

Goやそのgofmtcommandのように、独自の書式設定オプションを備えた言語を今でも好みます。Rust
でさえ、その今を持っています。rustfmt

于 2008-09-19T13:53:04.697 に答える
24

私は引き裂かれています。一方では、このように並べると、繰り返しコードが読みやすくなります。一方で、差分が読みにくくなります。

コードを理解できるようにすることは、差分を理解できるようにすることよりも重要であるため、混乱する必要はありません。

私見が同様の行を並べると、読みやすさが大幅に向上します。さらに、垂直方向の選択を許可するエディターを使用すると、簡単にカット アンド ペーストできます。

于 2008-09-19T13:52:56.303 に答える
19

私は決してこれをしません、そして私はいつもそれに反対することを勧めます。差分が読みにくくなることは気にしません。そもそもこれを行うには時間がかかることを気にしていますし、線を再調整する必要があるときはいつでも追加の時間がかかります。このフォーマットスタイルのコードを編集することは、多くの場合、膨大な時間の浪費になり、実際の変更を行うよりもフォーマットに多くの時間を費やすことになるため、腹立たしいです。

また、読みやすさのメリットについても異議を唱えています。このフォーマットスタイルは、ファイルに列を作成します。ただし、上から下への列スタイルでは読みません。左から右に読みます。コラムは標準的な読書スタイルから注意をそらし、目を下に引きます。すべてが完全に整列していない場合、列も非常に醜くなります。これは、無関係な空白に適用されますが、間隔が異なる複数の(おそらく無関係な)列グループにも適用されますが、ファイル内で次々に分類されます。

ちなみに、コーディング標準でタブやブレースの配置が指定されていないのは本当に奇妙だと思います。異なるタブスタイルとブレースの配置を混在させると、列スタイルの書式を使用する(または使用しない)よりも読みやすさが大幅に低下します。

于 2008-09-19T15:58:56.140 に答える
16

私は決してこれをしません。あなたが言ったように、間隔を調整するためにすべての行を変更する必要がある場合があります。場合によっては(上記の条件のように)、間隔を空けてブロックを条件とは別の行に配置すると、完全に読みやすく、保守がはるかに簡単になります。

また、エディターで適切な構文強調表示を使用している場合、この種のスペースは実際には必要ありません。

于 2008-09-19T13:54:33.757 に答える
11

これについては、Steve McConnell による非常に有用なCode Completeにいくつかの議論があります。この影響力のある本のコピーを所有していない場合は、自分に好意を持って購入してください。とにかく、議論は私が手に入れた初版の426ページと427ページにあります.


編集:

McConnell は、割り当てステートメントのグループで等号を並べて、それらが関連していることを示すことを提案しています。彼はまた、割り当てのグループ内のすべての等号を揃えないように警告しています。これは、関係がないのに視覚的に関連性を示唆する可能性があるためです。たとえば、これは適切です。

Employee.Name  = "Andrew Nelson"
Employee.Bdate = "1/1/56"
Employee.Rank  = "Senator"
CurrentEmployeeRecord = 0

For CurrentEmployeeRecord From LBound(EmployeeArray) To UBound(EmployeeArray) 
. . .

これはそうではありませんが

Employee.Name         = "Andrew Nelson"
Employee.Bdate        = "1/1/56"
Employee.Rank         = "Senator"
CurrentEmployeeRecord = 0

For CurrentEmployeeRecord From LBound(EmployeeArray) To UBound(EmployeeArray) 
. . .

違いは明らかだと思います。継続行の整列についてもいくつかの議論があります。

于 2008-09-19T14:01:58.323 に答える
8

個人的には、わずかに読みにくい diff を犠牲にして、より優れたコードの可読性を好みます。長い目で見れば、特に開発者が行き来するにつれて、コードの保守性を改善することはトレードオフの価値があるように思えます。

于 2008-09-19T13:55:31.430 に答える
3

私は2つのガイドラインに従おうとしています。

  1. 再フォーマットの必要性を最小限に抑えるために、可能な限りスペースの代わりにタブを使用してください。

  2. リビジョン管理への影響が心配な場合は、最初に機能を変更し、チェックインしてから、外観上の変更のみを行ってください。

「化粧品」の変更でバグが発生した場合、公共のむち打ちは許容されます。:-)


2020-04-19更新:私の、十数年で物事はどのように変化するか!今日この質問に答えるとしたら、おそらく「エディターにコードをフォーマットするように依頼するか、外観を変更するときに空白を無視するようにdiffツールに指示してください。

今日、コードの読みやすさを確認し、フォーマットを変えることで明快さが向上すると思うとき、私は常に提案を次のように終了します。「...エディターが自動的にこのようにしない限り。ツールと戦わないでください。常に勝ちます。 。」

于 2008-10-31T04:38:53.240 に答える
3

優れた編集者がいれば、彼らの主張は真実ではありません。:)

(vim の「ビジュアル ブロック」モードを参照してください。)

PS: わかりました。すべての行を変更する必要がありますが、高速で簡単です。

于 2008-09-19T13:51:46.757 に答える
1

空白を無視するようにdiffツールを設定できます(GNU diff:-w)。このように、差分はそれらの行をスキップし、実際の変更のみを表示します。とても便利な!

于 2008-09-19T14:28:49.947 に答える
1

自動化されたコード標準検証 (つまり、CheckStyle、ReShaper など) を使用する予定がある場合、これらの余分なスペースにより、ルールを記述して適用することが非常に難しくなります。

于 2008-09-19T14:00:03.650 に答える
0

複数のコントラクトの差分で同様の問題が発生しました... タブがすべてのユーザーにとって最適であることがわかりました。タブを維持するようにエディターを設定すると、すべての開発者が独自のタブの長さを選択することもできます。

例: I like 2 space tabs to code is very compact in left, but default is 4, so indents, etc. に関しては非常に異なって見えますが、さまざまな画面で表示されますが、差分は同一であり、原因はありませんソース管理の問題。

于 2008-09-19T13:53:37.080 に答える
0

最初と最後は好きだけど、途中はあんまり好きじゃない。

于 2008-09-19T13:57:47.447 に答える
-2

これはまさに、善良な主がタブとして与えた理由です。行の途中に文字を追加しても、配置が乱れることはありません。

于 2008-09-19T13:55:35.780 に答える