未使用変数に アンダースコアを使う起源を探る
きっかけ
会社でstorybook v6のMIGRATION.mdの輪読会をしているときに、
未使用変数にアンダースコア_
をつけている箇所があり、なぜ未使用変数にアンダースコアを使うのかと言われ、回答に困ってしまったので調べてみることにした。
なお著者はJS以外の言語はあまり良く知らないので、JS前提で進めていく。
TypeScriptではどうなってるのか
Fix #9458: exclude parameters starting with underscore from unusedParamter checks by mhegazy · Pull Request #9464 · microsoft/TypeScript · GitHub
パラメータのtextが_
だったらtrueを返すparameterNameStartsWithUnderscore
という関数を使って、アンダースコアな変数を弾いている
ESLintではどうなってるのか
no-unused-varsのargsIgnorePattern
でアンダースコアな変数をルール対象から外す設定が紹介されている。
しかし、extendsで使えるeslint:recommend
では特に指定はされていない。
ググってみる
- Unused underscore variables not being ignored by lint rules · Issue #19614 · microsoft/TypeScript · GitHub
- with --noUnusedParameters how can i skip uneeded parameters · Issue #9458 · microsoft/TypeScript · GitHub
- Uninteresting parameters
- What’s new in TypeScript · microsoft/TypeScript Wiki · GitHub
- c# - _=> what does this underscore mean in Lambda expressions? - Stack Overflow
見かけた意見
- スペースが変数に使えないので、スペースに見えるアンダーバーで代用
- Haskellや他の関数型言語ではより一般的で、そこから来てるかも
_
がパターンマッチングのワイルドカード文字で、気にしないって意味があるからそこから来てるかも。
結論
なぜアンダースコアな変数は、無視される変数という意図を込めて付けられるのか分からなかった。C#が起源という意見も見かけたが、Haskellという意見も見たし、真相は闇の中になってしまった。