これは私が実際に読みやすさに顕著な影響を与えることがわかった唯一のコードフォーマットルールであり、ほとんど労力はかかりません(コードエディタがあなたとの戦いを始めないと仮定します)。
宣言/定義の中で一貫した位置に名前を表示することは、プログラミング言語の設計として適切です。理論的根拠は簡単です。名前の始まりをすぐに見つけるために使用できる素敵な視覚的アンカー(中括弧またはぶら下がったインデント)があります。ファイルをスキャンして名前を見つけるときに、実際に言語を解析する必要はありません。
文書をフォーマットするときと同じです。新しいセクションを開始するときは、名前を太字で(多くの場合、独自の行に)付けます。
初期のCには非常に簡潔な署名がありました。戻り値の型はオプションであり、引数の型は署名の後に宣言されていました。名前も非常に短い傾向がありました。これにより、名前を相殺する不定期の戻り値型の影響が軽減されました。
double dot(x, y);
まだかなり消化可能です。
C ++はこれを少し悪化させました。引数タイプの仕様を署名に移動し、署名を長くしました。この構文は、後にCの標準化中に採用されました。
static struct origin *find_origin(struct scoreboard *sb,
struct commit *parent,
struct origin *origin)
消化性は劣りますが、それほど悪くはありません。(Gitからの抜粋)
ここで、長くて説明的な名前とパラメーター化された型を使用した最新のプログラミング手法を検討し、この選択がどのように悲惨なものになっているかを見てみましょう。Boostヘッダーの例:
template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{
typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
return result_type();
}
汎用コードを作成している場合、そのような署名は普通ではありません。一生懸命努力することなく、これよりもはるかに悪い事例の例を見つけることができます。
C、C ++、およびそれらの派生物であるJavaおよびC#は、読み取り可能な宣言/定義を持つ例外のようです。人気の高い前任者と同業者(Fortran、ALGOL、Pascal)は結果タイプの前に名前を付け、ありがたいことに、後継者(Go、Scala、TypeScript、Swiftなど)の多くはより読みやすい構文も選択しました。