概要
コードスタイルについて、C#のサンプルを交えてまとめてみました。
目次
Allmanスタイル
波かっこ{}を必ず新しい行に置くスタイル。
読みやすさを重視し、コードブロックの開始と終了が縦に揃う。
Microsoft Visual StudioやC#の標準のスタイル。
class Program
{
static void Main()
{
if (true)
{
Console.WriteLine("Hello Allman!");
}
}
}
由来
Sendmailの開発者であるエリック・オールマンにちなんで命名。彼が書いたコードから広まった。
メリット
- ブロックの階層が縦にそろい、対応する
{}を追いやすい - ネストが深くなっても構造が把握しやすい
デメリット
- 行数が増える
K&Rスタイル
波かっこの開始{を同じ行に置くスタイル。
class Program {
static void Main() {
if (true)
Console.WriteLine("Hello K&R!");
}
}
由来
ブライアン・カーニハン とデニス・リッチーの共著『The C Programming Language』(通称 K&R)で紹介されたスタイル。C 言語の公式本で採用されたため、C系の言語で広く普及した。
メリット
- 行数がコンパクトになるのでスクロール量が減る
- 制御文と
{が同じ行なので、「このif文はこのブロック」というような対応が一目で分かる
デメリット
- 単文の
ifなどで波かっこの省略が起こりやすく、後から1行追加してバグに繋がる事故が発生しやすい - 入れ子が深い時は、対応している同階層の波かっこが縦方向で追いにくい
1TBS
K&Rを元にしたスタイルで、K&Rに加えて必ず波かっこを付ける。
class Program {
static void Main() {
if (true) {
Console.WriteLine("Hello 1TBS!");
}
}
}
由来
「One True Brace Style」の略で、Linuxカーネルの開発者たちの間で使われていた「唯一正しいブレーススタイル」というジョークが由来。
メリット
- 見た目はほぼK&Rのまま、単文でも必ず
{}を付けるため、行の追加・削除でのヒューマンエラーを強く防止
デメリット
- K&Rよりは少しだけ冗長(ただし差は小さい)
Whitesmithsスタイル
波かっこを独立した行にインデントして記載する。
class Program
{
static void Main()
{
if (true)
{
Console.WriteLine("Hello Whitesmiths!");
}
}
}
由来
初期のC言語のコンパイラ「Whitesmiths C」のドキュメントに使用されていたスタイルから。
メリット
-
{}がブロック本体と同じインデントで、ここが中身の塊と視覚的に強く訴えかける - 1 行あたりの構造が均質で、機械的に追いやすいと感じる人もいる
デメリット
- 現代の主流からは外れているため、チーム内の相互理解やツール整備が必要
- 行数が増える
GNUスタイル
クラスやメソッド等の宣言に付く波かっこは宣言行と同じインデントに置き、ifやfor、whileなど制御構文のブロックでは波かっこを制御構文よりひとつ深く置き、中身の文はさらにひとつ深くする。
親 → { → 中身の流れで、インデントが 1段ずつ深くなる構造。
class Program
{
static void Main()
{
if (true)
{
Console.WriteLine("Hello GNU!");
}
}
}
由来
プログラマや開発者に人気があるテキストエディタであるEmacsの、CやC++などのコードを編集するための「c-mode」のデフォルト設定から。EmacsはLisp系の文化を背景に持っており「構造を強調するために、ブロックの開始を親より一段深くする」思想があった。
メリット
- ブロック構造を強調しやすい(制御キーワードとブレースの視覚的分離)
デメリット
- インデントが増えやすく、横方向の可読性が落ちる
終わりに
個人的にはC#に慣れているのでAllmanスタイルが好みです。