الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أيهم أسرع وأفضل في التنفيذ بالنسبة للـ "&&"؟

بدأه kiooo96 في 17 نوفمبر 2012 · 4 رد · 701 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته...

بافتراض المتغيرين الآتيين:

username = "Kareem";
password = "123";

أيهم أسرع وأفضل:

if(username == "Kareem" && password == "123")
{ }

أم

if(username == "Kareem")
{
if(password == "123")
{ }
}

تم تعديل هذه المشاركة بواسطة kiooo96 في 17 نوفمبر 2012 في 00:32

#2

الاول اسرع وافضل من ناحية تنضيم الكود

رَبِّ أَوْزِعْنِي أَنْ أَشْكُرَ نِعْمَتَكَ الَّتِي أَنْعَمْتَ عَلَيَّ وَعَلَى وَالِدَيَّ وَأَنْ أَعْمَلَ صَالِحًا تَرْضَاهُ وَأَدْخِلْنِي بِرَحْمَتِكَ فِي عِبَادِكَ الصَّالِحِينَ

تلاوات خاشعة مؤثرة

#3

شكراً أخي سفيان.

طبعاً صحيح هو الأسرع والأسهل في الكتابة والتنظيم، ولكن أيهما أسرع في التنفيذ؟

لأن حسب علمي الكود الأول سيتحقق من الشرطين حتى لو لم يتحقق الشرط الأول، مما يؤدي إلى بطء في أداء التطبيق.

#4

في فيجوال بيسيك كان هناك تعابير And , AndAlso

و Or , OrElse

و الفرق بينهما أن القصيرة تتحقق من جميع الشروط ثم تحسب النتيجة ثم تقرر سير الشرط

بينما الطويل فيحسب الشروط أولا بأول حتى يصل لنتيجة لا فائدة من استكمال التحقق من بقية الشروط حينها يقرر الشرط

كمثال لو وضعنا مثالك أعلاه بلغة بيسيك واستخدمنا تعليمة AndAlso وكانت نتيجة الشرط الأول False فالنتيجة ستكون False و لا داعي للتحقق من الشرط الثاني لأن قيمتها مهما كانت لن تغير النتيجة

أما في لغة سي شارب فقد جعلوا && تقابل AndAlso و || تقابل OrElse

و أما ما يقابل التعليمات And, Or فهما تعليمات العمليات الثنائية & و | المفردة

حيث يعتبر أن عملية حسابية المقصود منها إيجاد حاصل تطبيقها على الحدين

بينما التعليمات الأولى تعتبر للتحقق ولهذا يسلوك سلوك الذكي بأن يختصر زمن التنفيذ في حال لن تؤثر نتيجة الشروط الأخرى

ولكي تتأكد من ذلك جرب المثال التالي :

        	int i = 0;
        	if (false && ++i == 1)
        	{

        	}

جربه مرة بـ & و مرة بـ && وراقب قيمة المتحول i ستجد أنه في حالة & المفردة ستزداد قيمة i لتصبح 1 أي أنه نفذ الكود i++ علما أنا الطرف الأيسر false

بينما عندما تضع && ستجد أن i بقيت 0 أي أنه تجاهل الطرف الأيمن i++ == 1 وذلك لأن false حسمت النتيجة ونتيجة الطرف الأيمن لن تغير شيئا فلا داعي لإضاعة الوقت بتنفيذها

أي سيتم تجاهلها أثناء ترجمة الكود

وعليه فالمثال الأول hالتي ذكرتها أنت في أول الموضوع يعتبر الأسرع

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 17 نوفمبر 2012 في 08:44

3

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#5

جزاك الله خير "أبو أحمد" على التوضيح، والحمدلله فهمت... تستحق التقييم وأفضل إجابة.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…