14

この質問での私の意図は、衒学的なことではなく、むしろ重要なトピックの見過ごされている軸(空白の使用)を探ることです。水平方向の空白の使用、条件文の後のインデント、if と括弧の間のスペースなどについては、多くの議論と注意が払われてきました。と標準化されていますが、一部の企業では、それについての議論を禁止する規則さえあります。

水平方向の空白の状態を考えると、垂直方向の空白の議論が死んだ問題であるのはなぜですか? xがyよりも重要なのはなぜですか? 数日前、コードを読んでいるときに、何も考えずにステートメントの縦方向のグループを調整することがよくあることに気付きました。他の人のコードを読んで、垂直方向の空白に目を向けたところ、いくつかのパターンに気づいたので、stackoverflow に質問します。

  • 垂直方向の空白に適用する厳密な規則と柔軟な規則は何ですか?
  • 一般的に非常に悪い、または非常に良い習慣と見なされる垂直方向の空白の使用はありますか?
  • 「正しい」垂直方向の空白を含むコードを読むと、それを理解するのに役立ちましたか?
  • タイポグラファーと私以外の誰かが気にしますか?
4

7 に答える 7

22

私はコードの縦方向のスペースを、散文のパラグラフを見るのと同じように見ています。パラグラフが共通のポイントやアイデアを持つ文をグループ化することを意図しているように、関連する行はグループ化する必要があります。

全体的な目的は、コードの可読性を向上させることです。段落のない記事が読みにくいのと同じように、縦方向のスペースのないコードも読みにくいのです。散文と同じように、短すぎる段落と長すぎる段落の構成にはバランスが必要です。しかし、最終的には、個人のスタイルと好みに大きく依存します。

于 2009-11-20T17:34:12.400 に答える
6

最も重要なことの 1 つは、次のような論理的なステップをグループ化することだと思います。

foo.setBar(1);
foo.setBar2(2);
foo.writeToDatabase();

bar.setBar(1)
bar.setBaz(2);
bar.writeToDatabase();

そうすれば、とにかくコードが読みやすくなり、より説明的になります。

于 2009-11-20T17:25:50.987 に答える
6

一連のステートメントが論理的に関連している場合は、前後に空白行を入れます。この分離は、後で関数にリファクタリングする必要がある場合に役立ちます。

二重空白行について: 何かがそれほど明確である場合は、それを関数にすることを検討する必要があります。

于 2009-11-20T17:25:52.903 に答える
3

コメントがコードの複数行に適用される場合、(ブロックの終わりなど) 分割する他の構文がない限り、それらの行の最後の行の後に空白を置きます。

数行のコードを必要とする「何か」を実行している場合は、その直後に「別の何か」が続く場合、個別の関数に抽象化するか、コメントを配置します[*]。そのため、コード行は通常、フロー制御によって (私の意見では) 一目瞭然になる場合を除いて、短いブロックにグループ化されます。

空白については少し気になりますが、実際にはコメントの方が気になります。数行のコードが一緒になって特定のことを行い、それが関数として取り出されていない場合、それが何であるかについての英語の説明を見たいと思います. そうすれば、関数の「ステップ」が本当に正しい結果になることがわかり、各ステップがそれが主張することを実行することを確認できます。

クラスでは、メソッド/メンバー関数の間に空白を入れる場合と入れない場合があります。C++ では、アクセス指定子の前に空白を置きます。

クラス間 (Java の無名の内部クラスではない場合もあります) およびクラス外の関数間に空白を入れます。

それ以外は、私のコードはかなり垂直方向に密集しています。ヘッダーファイルなどのセクションを区切る場合でも、複数の空白行を使用することはほとんどありません。コメント行が「ヘルパー関数」のような完全に平凡なものになってしまったとしても、空白行-空白行よりも空白行-コメント行-空白行を好むでしょう。関数間に巨大な垂直方向の空白があるスタイルは嫌いです - それらが非常に分離していて、両方を同時に画面に表示したくない場合は、それらを別のファイルに入れるか、Doxygen でギャップを埋めることをお勧めします/Javadoc コメント。

[*] 私がチェックインしたバージョンでは、通常、多かれ少なかれコメントなしでコードを書き、それをコンパイルし、簡単なテストを実行し、コメントを付け、適切なテストを実行し、コミットします。それはしばしば少し変化し、時には大きく変化します。たとえば、事前に正確に定義されたアルゴリズムや、実装が「明白」な仕様にコーディングしている場合は、最初にコメントを書き、次にコードを書きます。

于 2009-11-20T17:40:20.770 に答える
2

プログラマーがコードを理解する能力は、一度に表示できるコードの量によって一般的に制限されることは、何十年も前から知られていました。(たとえば、Weinberg 著の「Psychology of Computer Programming」、古き良き時代の名著を参照してください。) 紙のリストの昔は、プログラマーは大きなテーブルをつかみ、複数のページにリストを広げていました。現在、画面のスペースは 24x80 の時代よりもいくらか良くなっていますが、実際のコードを表示するために多くの空白行が画面のスペースを占有するため、私は依然として垂直方向の空白の使用を最小限に抑える傾向があります。

于 2009-11-20T17:27:12.477 に答える
1

私は確かに、必要に応じて空白行を使用してコードを適切にグループ化することに気を配り、傾向があります (少なくとも私の目には)。多くの場合、これは多くの空白行を意味しますが、一般的に、すべてを詰め込んだ場合よりもコードが読みやすいと考えています。演算子の周りのスペースが非常に良いものであるように、論理的にグループ化されたステートメントの周りの空白行も同様です。

ただし、一度に複数の空白行があると、少し場違いに見えます。

于 2009-11-20T17:17:44.527 に答える
1

コードが縦方向に不規則に配置されていると、読みにくいと思います。不要な中かっこを削除したり、ifs や fors などの短いブロックの場合は同じ行に配置したりします。

于 2009-11-20T17:18:10.953 に答える