---
paths: ["Tongue extraction/**/*.cs", "DeepTIAS.Tests/**/*.cs"]
---

# コーディング規約 (Coding Style)

C# のコードを書くときは本規約に従うこと．基本は Microsoft の [C# のコーディング規則](https://learn.microsoft.com/ja-jp/dotnet/csharp/fundamentals/coding-style/coding-conventions) と [識別子の名前付け規則](https://learn.microsoft.com/ja-jp/dotnet/csharp/fundamentals/coding-style/identifier-names) に従い，本規約ではプロジェクト固有の点だけを定める．

## 既存コードの扱い (Legacy Code)

- 引き継いだコードは命名が混在している（`path_outputDir`・`mat_input` のようなスネークケースのローカル変数，`Button_start_Click` のようなハンドラ名）．
- **新しく書くコードは本規約に従う．**既存コードの名前を変えるのは，その箇所を整理・修正するときに限る．名前を変えるためだけの一括変更はしない（差分が大きくなり，挙動を変えていないことの確認が難しくなるため）．
- WinForms デザイナが生成する名前（`button_start`・`Form1_Load` 等）は，デザイナとの対応が崩れるため変えない．

## 命名 (Naming)

| 対象 | 形式 | 例 |
| --- | --- | --- |
| クラス・メソッド・プロパティ・定数 | PascalCase | `TongueDetector`，`DetectTongue`，`ScoreThreshold` |
| ローカル変数・引数 | camelCase | `outputDir`，`inputImage` |
| private フィールド | `_` ＋ camelCase | `_session` |
| インターフェース | `I` ＋ PascalCase | `IFeatureExtractor` |

- 画像処理の変数は，型が分かる名前にする（`Mat` なら `mask`・`binaryImage`，パスなら `maskPath` のように `Path`・`Dir` を付ける）．
- 論文や手法の名前（`Chiu`・`FiveClick` 等）は既存の呼び方をそのまま使う．

## 書式 (Formatting)

- インデントはスペース 4 つ．波かっこは次の行に置く（Visual Studio の既定）．
- `var` は右辺から型が明らかなときだけ使う．
- `using` は `System` 系を先頭にし，未使用のものは残さない．

## マジックナンバー (Magic Numbers)

- 解析結果に影響する数値（検出スコアのしきい値 0.5，小領域除去の面積 500，領域分割の比率 0.2 等）は，名前の付いた定数にまとめる．値は変えない（[解析処理仕様](../../docs/04_SPEC/SPEC_02_解析処理仕様.md) が基準）．
- 定数には，何を表し，単位は何か（画素・比率等）をコメントで書く．

## 外部の実行ファイル・DLL の呼び出し (External Binaries)

- 外部 exe（`TongueFeatures.exe`・`TongueAnalysis.exe`）を呼ぶ処理は 1 か所にまとめ，引数の並びと出力ファイルをコメントに書く．
- ネイティブ DLL の `DllImport` 宣言は専用のクラスにまとめる．

## コメント (Comments)

- コメントは日本語で書く．
- 「何をしているか」ではなく「なぜそうしているか」を書く（手法の根拠となる論文，値を決めた理由等）．
- public なクラス・メソッドには `///` の XML ドキュメントコメントで，役割・引数・戻り値を書く．
- 使わなくなったコードはコメントアウトで残さず削除する（履歴は git に残る）．
