キーワードは、「同一性と同値性」「シングルトン(Singleton)」です!
None = Python版null ですが、 コーディング規約のデファクトスタンダードになっているPEP8サマは、 「Noneとの比較には is を使うべきで、絶対に等値演算子を使ってはならない」としています。 なぜなんでしょうか。 https://twitter.com/codeTaniii/status/1546678516472635393
同一性と同値性
簡単にいうと、
「同一性」は、出所が同じ/同じ実体を参照している つまるところ、同じインスタンスということです。
「同値性」は、論理的/数学的に等しい
その場での判断なので、出自は関係ありません。
シングルトン(Singleton)
シングルトンは、1つのクラスに対して、1つのインスタンスのみを生成する設計のこと
Noneのようなシングルトンと比較する場合は...
そもそも、Noneはシングルトンなので、1つのインスタンスしか存在しえないということです。 Noneとされたものはすべて同じインスタンスなので、「xxx is None」で評価可能になります。 「同一性」で評価できるなら、「同一性」で評価したいところです。 なぜならば、「同値性」の評価は、人為的な定義しだいで変化の余地が多分にあるからです。 たとえば、False == None とか、0 == None が、どのような動作をするか、不安定になります。
Noneを「同一性」で評価すれば、こんな心配とは無縁です。 https://twitter.com/codeTaniii/status/1546757907961638913
// 追記: 2023/04/07
追記: Readability だけじゃない...!!
春休みでちょっと時間ができたので、更新。 単に Readability の問題だけでなく、これ(=同一性) を使うとかなり綺麗(かは賛否がありますが)に動的型付け言語らしく書けるようになる場面が存在します。 例えば、↓のコードでは、「同一性」判定を使うことで、関数の返り値が1つで済んでいます。
// ここまで
ps.
ひとこと感想 今回は、「シングルトン」について調べたのが急流となって、全体がよく分かりました~
コメント