1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数行に渡るメソッドチェーンの.や,の位置は行頭と行末どちらがいいと思いますか?

Last updated at Posted at 2026-01-22

私の場合、カンマ(,) は行末、メソッドチェーンのドット(.) は行頭+1インデントで書くことが多いですね。もちろん雇用先にコーディング規約があれば従います。

昔はカンマも行頭に書いてたんですが、最近は関数の宣言や呼び出しのパラメータの末尾にカンマ(,)を書ける言語が増えてきたのでやめました。

例えばPHPの場合、バージョン8でコンストラクタのパラメータに型とprivate/public指定を加えるだけでクラスメンバを指定できるめっちゃ便利な記法が追加されたんですが、そういう場合でもパラメータ宣言の末尾にカンマが書けるようになってます。

サンプルついでにいくつか新しい記法載せときます。

class HogeClass {
  // private $PrivateClass; ← 不要
  // public $PublicClass; ← 不要

  public function __construct(
    private PrivateClass $PrivateClass, // これでクラスメンバの宣言と受け渡しが終わる
    public PublicClass $PublicClass, // パラメータ宣言の末尾に,が付けられる
  ) {
    // $this->PrivateClass = $PrivateClass; ← 不要
    // $this->PublicClass = $PublicClass; ← 不要
  }
}

function hoge (
  string|null $prm1="hogehoge", // パラメータの複数型制約
  int $prm2=2, // パラメータ宣言の末尾に,が付けられる
) : bool|string // 戻り値の型制約(複数もOK)
{
  …
}

当然 呼び出し側もパラメータ末尾にカンマがつけられます。名前指定パラメータも同様です。

ちなみにPythonも似た記法が使えます。C#やJavaだとclassの代わりに新しく導入された record 型の宣言でほぼ同じ記法が使えます。歴史のある上記の言語すら続々とこうなってますので、新しい言語もこれからそうなっていくでしょう。

この書き方で行頭にカンマ(,) を置くと、Git使う時に余計な差分が出やすくなるんですよ。だからこれは現代では古い(旧世代のハック的な)書き方になりつつあると思います。

まぁ、今の時代は多くの言語でこのように書けるので、

hoge(
  prm1,
  prm2,
);

下のように書かなくて良くなったってことです。

hoge(
  prm1
  , prm2
);

とはいえ基本的に好みですし、引き継いだコードで下の書き方になってても、私は滅多に直しません。依頼された場合はlinterやformatterで機械的に統一しますが。
時代によって書き方のトレンドはどんどん変わっていきますし、会社によってルールも違うので、プロジェクトの状況を自然とくみ取って合わせてあげられるプログラマーになるのが良いと思いますよ。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?