Die Handlichkeit geht auf Kosten von dummen Fehlern, die nicht zum frühestmöglichen Zeitpunkt entdeckt werden, und zwar so nah an der fehlerhaften Codezeile wie möglich.
Ich denke, dass diese spezielle Funktion bestenfalls gelegentlich nützlich ist, während dumme Fehler passieren. die ganze Zeit .
Ein SQL-ähnliches NULL wäre sicherlich schlecht für Tests, die sich darauf stützen, dass Aussagen entweder wahr oder falsch sind. Betrachten Sie diesen Code aus unittest.py:
class TestCase:
...
def failUnless(self, expr, msg=None):
"""Fail the test unless the expression is true."""
if not expr: raise self.failureException, msg
Nehmen wir nun an, ich habe einen Test, der dies tut:
conn = connect(addr)
self.failUnless(conn.isOpen())
Angenommen, connect
gibt fälschlicherweise null zurück. Wenn ich das "Null-Muster" verwende, oder die Sprache es eingebaut hat, und conn
null ist, dann conn.isOpen()
Null ist, und not conn.isOpen()
ist ebenfalls null, so dass die Behauptung geht , obwohl die Verbindung offensichtlich nicht offen ist.
Ich neige dazu zu denken NULL
ist eine der schlechtesten Eigenschaften von SQL. Und die Tatsache, dass null
In anderen Sprachen ist die stillschweigende Übergabe eines Objekts eines beliebigen Typs nicht viel besser. (Tony Hoare nannte Null-Referenzen "Mein Milliarden-Dollar-Fehler" .) Wir brauchen weniger von diesen Dingen, nicht mehr.