コーディングスタイル:ケツカンマ問題
英語では trailing comma と呼ぶ。
"a, b, c" のように項目と項目の間をカンマで区切る構文で、終端にカンマを付けていいかどうか、"a, b, c," と書くことを許すかどうかという問題
プログラミング言語、ファイル書式で問題となる。
プログラミング言語、ファイル書式で自由定義になっている時に論争となる。
あるいは、既存のプログラミング言語、ファイル書式の定義を反対にすることを要求することがある。
ケツカンマ否定
(カンマは飽くまで「継続記号」であるべき派)
カンマがあるということは次に要素が来るという事を意味しているはずで、書き漏らしかもしれない。
カンマの次が「空文字列」という要素であるかもしれない。
ケツカンマ容認
(カンマは「終端記号」とした方が都合が良いと考える派)
自動構文生成のコーディング上、前の要素があったかどうか、次の要素があるかどうかを状態として持つのがとても大変である。
人間が読み書きする時の区切りと、機械が読み書きする時の区切りの混同がそもそもの間違いである。
特殊
そもそもカンマは要らない、項目の区切りが欲しいだけなので、改行であるべき
改行だらけになるので、あまりいい案ではない。
ただし、項目単位の追加削除をするときには合理的に見える。
カンマを使いつつも、実際にはその次がほとんど改行になっているケースはたくさんある。
自動構文生成時のケツカンマ問題回避のために、1フィールドごとに手前にカンマを付ける手法がよく知られている。(前カンマ)
こうすると先頭フィールドのみの特例処理で済み、「次のフィールドがあるかどうか」を気にする必要がない。
人間が見た場合には奇妙な構文に見える。
code:sample.txt
a
,b
,c
前カンマを使わないと、本来無関係の前の行が差分の影響を受ける。
code:diff
$ diff -c sample.txt.old sample.txt.new
*** sample.txt.old 2022-11-11 21:42:37.493153379 +0000
--- sample.txt.new 2022-11-11 21:42:54.797154022 +0000
***************
*** 1,2 ****
a,
! b
--- 1,3 ----
a,
! b,
! c
JavaScript
Keyword
trailing comma, trailingcomma, 末尾のカンマ, 最後のカンマ