taskeknight
@taskeknight (安藤 順也)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【C#】引数が長くなった際に改行して整形しようとしているのですが、どうされていますでしょうか

Q&A

Closed

引数が長くなった際に改行して整形しているのですが、ここの書き方で少し確認させてください。
皆さんどうされていますでしょうか。

■引数が多い(長い)場合 1

public void Hoge(
    n1, 
    n2,
    ...
    nx) // カッコ落とさない
{
    // 処理
}

■引数が多い(長い)場合 2

public void Hoge(
    n1, 
    n2,
    ...
    nx
    ) // カッコ落とす
{
    // 処理
}

■引数が多い(長い)場合 3

public void Hoge(
    n1, 
    n2,
    ...
    nx
) // カッコ落とすvar.2
{
    // 処理
}

■どこまでも改行しない

public void Hoge(n1, n2, ... nx)
{
    // 処理
}

■その他

上記3パターンが考えられたのですが、どの書き方を正とすべきかご意見いただけますでしょうか

1

4Answer

長くなっても改行しないことが多いですが、
敢えて行を変える場合は、元々) {と書いているので、以下のような感じです。

public void Hoge (
    n1, 
    n2,
    ...
    nx
) {
    // 処理
}

ただし、それほどに引数が多いならクラス化を検討すると思います。

2Like

Comments

  1. @taskeknight

    Questioner

    回答ありがとうございます!確かにそれだと見やすいかもしれません

C系の言語のメリットは、記号により感覚的に塊を表現できることです。このメリットを最大限に活かすには、中括弧の始まりと終わりを同一カラム位置に配置することです。
それが守られていれば1~3はあまり差異はないと思いますが、無駄な改行を避ける意味では1が最適だと思います。
ちなみに、僕の場合パラメータに対するコメント込みで、以下のように記述します。

.cs
//-----------------------------------------
// 処理名や処理の概要
//-----------------------------------------
int MyFunc(         // 戻り値の説明だよ
    int a,          // パラメータAだよ
    int b,          // Bだよ
    string name)    // 名前
{
    
    return a + b;
}

こんな感じです。
戻り値やパラメータのコメントを関数ヘッダに書き込むのは二度手間で馬鹿らしいし、コメントのメンテ忘れを防ぐ効果もあります。

2Like

Comments

  1. @taskeknight

    Questioner

    回答ありがとうございます!なるほど、確かにそれだと修正時のメンテ忘れは起こらないですね!

dotnet-format などの自動整形ツールに任せるのはどうでしょうか。ちなみに dotnet-format を使うと1のカッコを落とさないスタイルになるようです。

1Like

Comments

  1. @taskeknight

    Questioner

    回答ありがとうございます!そうなんですね。確認させていただきます

まず、大前提として引数が多いメソッドは設計を見直せないかを考えます。
やむなく、改行する場合は中括弧の位置は揃え、最小限の改行で済むように整形します。
あと、引数や戻り値の説明はSandcastle形式で記述します。
以上、わたしの場合ですが。

1Like

Comments

  1. @taskeknight

    Questioner

    ありがとうございます!おっしゃる通り、そもそも設計ミスの可能性がありますので見直しする必要性は、私もあるかと思います!

Your answer might help someone💌