في كيفية العديد من اللغات باطل لا يساوي أي شيء ولا حتى Null?

StackOverflow https://stackoverflow.com/questions/75267

سؤال

في كيفية العديد من اللغات باطل لا يساوي أي شيء ولا حتى Null?

هل كانت مفيدة؟

المحلول

هذا هو الطريق في SQL (منطق اللغة) لأن null يعني غير معروف/غير معروف.

ومع ذلك ، في لغات البرمجة (مثل C++ أو C#), null pointer/مرجع قيمة محددة مع معنى محدد -- لا شيء.

اثنين من الحلاوة هي equivilent ، ولكن اثنين من المجاهيل لا.الارتباك يأتي من حقيقة أن نفس الاسم (null) يستخدم لكلا المفهومين.

نصائح أخرى

في VB6 التعبير Null = Null سوف تنتج Null بدلا من True كما كنت تتوقع.هذا سوف يسبب خطأ وقت التشغيل إذا كنت في محاولة لتعيين منطقية ، ومع ذلك إذا كنت تريد استخدامه كما شرط "If ... Then"وسوف تتصرف مثل False.وعلاوة على ذلك Null <> Null سوف أيضا تنتج Null, لذا:

في VB6 هل يمكن أن نقول أن Null هو لا يساوي نفسه (أو أي شيء آخر) ، ولا غير متكافئة!

كنت من المفترض أن اختبار باستخدام IsNull() وظيفة.

VB6 أخرى خاصة القيم:

  • Nothing لكائن المراجع. Nothing = Nothing هو خطأ ترجمة.(يفترض أن مقارنتها باستخدام "is")
  • Missing على المعلمات الاختيارية التي لم تعط.فإنه لا يوجد لديه حرفية التمثيل لذلك لا يمكنك حتى كتابة Missing = Missing.(الاختبار IsMissing(foo))
  • Empty على غير مهيأ المتغيرات.هذا اختبار تساوي نفسها على الرغم من أن هناك أيضا وظيفة IsEmpty().
  • ...اسمحوا لي أن أعرف إذا كنت قد نسيت أحد

أتذكر أنني كنت قليلا بالاشمئزاز مع VB.

أوراكل من هذا الطريق.

SELECT * FROM dual WHERE NULL=null;  --no rows returned

الخلية null آمنة المساواة المشغل ، <=>, والتي ترجع صحيح إذا كان كلا الجانبين على قدم المساواة أو كلا الجانبين هي null.انظر الخلية مستندات.

في C#, Nullable<bool> له خصائص مثيرة للاهتمام فيما يتعلق المنطقية ، ولكن المساواة المشغل هو نفس أنواع أخرى في أن اللغة (أي ((منطقي?)باطل == (منطقي?)null) == true).

للحفاظ على تماس سلوك تماس العوامل المنطقية ، والحفاظ على الاتساق مع عدم تماس المنطقية ، nullable منطقية لديه بعض الخصائص المثيرة للاهتمام.على سبيل المثال:صحيح || null == صحيح.false && null == كاذبة ، إلخ.هذا يقف في تناقض مباشر مع غيرها من قيمتها ثلاثة المنطق اللغات مثل ANSI SQL.

يمكنك جعل روبي عمل هذه الطريقة:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null

في SQL عليك أن تفعل شيئا مثل:

WHERE column is NULL

بدلا من

WHERE column = NULL
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top