未使用変数に アンダースコアを使う起源を探る

きっかけ

会社で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-varsargsIgnorePatternでアンダースコアな変数をルール対象から外す設定が紹介されている。
しかし、extendsで使えるeslint:recommendでは特に指定はされていない

ググってみる

見かけた意見

  • スペースが変数に使えないので、スペースに見えるアンダーバーで代用
  • Haskellや他の関数型言語ではより一般的で、そこから来てるかも
  • _がパターンマッチングのワイルドカード文字で、気にしないって意味があるからそこから来てるかも。

結論

なぜアンダースコアな変数は、無視される変数という意図を込めて付けられるのか分からなかった。C#が起源という意見も見かけたが、Haskellという意見も見たし、真相は闇の中になってしまった。