ローカル関数を使用する

C#7 からローカル関数が使えるようになりました。
今までは、ひとつのメソッドが長くなりすぎた場合に、可読性を向上させる目的で下請けメソッドを宣言していました。

int Method() {
    :
    Shitauke();
    :
}

int Shitauke() {
    :
    :
}

ローカル関数を使うと、以下のように書くことができます。

int Method() {
    int Shitauke() {
        :
        :
    }
    :
    Shitauke();
    :
}

これによって、気軽に自身のメソッドブロック内に独立性の高い処理をメソッドアウトできるので、他のメソッドに干渉されることなく関連性の高いメソッドをまとめて読めるので積極的に使っています。
ただし、メソッドブロック内のコードの可読性が落ちます。
特に、ローカル関数の宣言部分と、メソッドのメインコードの区別がつかないところが悩ましいです。
いろいろ試してみた結果、次のように落ち着きました。

  1. ローカル関数名はキャメル表記にする
  2. ローカル関数の宣言はメソッドブロックの最後にまとめる
  3. そのメソッドの主処理の末尾に return ステートメントを記述する

ローカル関数名をキャメル表記にするのは、主処理が関数を呼び出すとき、他で宣言されているものかローカル関数かを明確にできるためです。
ローカル関数の宣言を最後にまとめる理由ですが、先頭にまとめると主処理がどこから開始されるのかを探さなければならないからです。
主処理の最後に return を記述する必要は本来はないのですが、これもどこまでが主処理の最後なのかを明確にするためです。

int Method() {
    :
    shitauke();
    :
    return;

    int shitauke() { // ローカル関数名はキャメル表記にする。
        :
        :
    }
}

ただし、これが正解かというと、いろいろな意見もありそうです。
とりあえず、しばらくは上記の規則いこうかと思います。