Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

undefinedかnullの片方を使用禁止にする #1035

Open
Hiroshiba opened this issue Dec 3, 2022 · 2 comments
Open

undefinedかnullの片方を使用禁止にする #1035

Hiroshiba opened this issue Dec 3, 2022 · 2 comments

Comments

@Hiroshiba
Copy link
Member

内容

javascriptはundefinedとnullがあり、どちらを「何もない」として使うかは個人によるところが大きいと思います。
実際VOICEVOXは様々な人からコミットを受けており、両方が混在しています。

問題ないといえば問題ないのですが、実装速度を早めるためにも規約を設けてどちらか片方に寄せたいです。

Pros 良くなる点

コーディングしやすくなる

Cons 悪くなる点

どちらにすればいいかは派閥がある

実現方法

問題はどっちに寄せるかですが、個人的にはundefinedに寄せたいです。

typescript自身はundefinedを選んでいます。
https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#null-and-undefined

あと何よりも、Optionalな引数(hoge: string?)を定義して引数が無指定だった場合にundefinedが入るのが言語上定まっているので、undefinedを使うのが良いのかなと思っています。

その他

linterなどでnullを禁止する方法があれば知りたいです。
また意見も歓迎しています。

@k-chop
Copy link
Contributor

k-chop commented Dec 3, 2022

統一するならundefinedでよさそうと思いました。

eslintでnull禁止の方法は eslint/eslint#12177 (comment) ←こちらに no-restricted-syntax を使って実現してる例があります。

"selector": ":not(BinaryExpression:matches([operator='!=='], [operator='==='])) > Literal[value=null]"

この例だと、nullを返すAPIのライブラリ等のために hoge === nullhoge !== null は許容しつつ、 hoge = nullhoge(null){ hoge: null } は許さない設定になります。

ref:
https://eslint.org/docs/latest/rules/no-restricted-syntax
https://eslint.org/docs/latest/rules/eqeqeq

個人的にはnullかundefinedは区別せず、判定には一律 hoge == null hoge != null を使うのが好みですが、VOICEVOXのコードを検索したところ hoge === undefined hoge !== undefined の方が圧倒的多数派でした。
nullとundefinedを区別している既存コードもありそうですし、判定方法も統一するなら後者に合わせた方が安全な気はしますね・・・

@Hiroshiba
Copy link
Member Author

ありがとうございます!!
確かにnullを返すライブラリのために=== nullは残しておかないといけないですね。

今まで見た感じ、nullとundefinedが混在している箇所は無い・・・はずです。
まあ一旦===側に寄せちゃって、時間あるときに==に寄せてもいいかもと思いました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants