بحسب ما أفهمه أنهما لنفس الغرض، الفرق هو لتحسين الأداء حيث أن الأخير يتجاهل فحص الطرف التالي في حال وجد أن الأول هو False و بالتالي فالنتيجة هي False أيا كانت نتيجة الطرف الآخر، بمعنى أنه لن يفحص الطرف الأيمن إلا عند الحاجة
أما ال And سيقوم بفحص الطرفين مهما كانت النتائج وفي كل الحالات.
هذا التحسين موجود بشكل افتراضي في اللغات المتقدمة والأحدث ولهذا في لغة #C مثلا لا يوجد سوى & أو && وسيتم تجاهل فحص الطرف الأيمن إذا حسمت النتيجة من حساب الطرف الأيسر.
يتضح لك ذلك في حال كان الحد الآخر يحوي استثناء فلن يظهر في حال عولج الاستثناء في الطرف الأول كمثال:
if((list != null) && (list.Count > 0))
{
}
سنلاحظ أنه لن يحصل استثناء المؤشر null في الحد الأيمن حتى لو كان list هو null فعلا لأنه لو كان كذلك سيكتشف أن الحد الأيسر نتيجته false و بالتالي لا داعي لفحص الحد الأيمن ومنه لن يحصل استثناء.
التعليقات