هل هناك سبب لتفضيل التحول على تعليمة if مع شرط واحد فقط؟
-
08-07-2019 - |
سؤال
ولقد وجدت التعليمة البرمجية التالية في مشروع فريقي:
Public Shared Function isRemoteDisconnectMessage(ByRef m As Message)
isRemoteDisconnectMessage = False
Select Case (m.Msg)
Case WM_WTSSESSION_CHANGE
Select Case (m.WParam.ToInt32)
Case WTS_REMOTE_DISCONNECT
isRemoteDisconnectMessage = True
End Select
End Select
End Function
وناهيك عن أن وظيفة لايوجد نوع الإرجاع (I يمكن بسهولة إضافة 'كما منطقية')؛ ما أنا أتساءل غير، يمكن أن يكون هناك أي سبب لتفضيل فوق على (بالنسبة لي، أكثر قابلية للقراءة من ذلك بكثير) رمز التالية؟
Public Shared Function isRemoteDisconnectMessage(ByRef m As Message) As Boolean
Return m.Msg = WM_WTSSESSION_CHANGE AndAlso _
m.WParam.ToInt32() = WTS_REMOTE_DISCONNECT
End Function
لطرح السؤال بشكل عام: هل يعقل أن استخدام switch
(أو، في هذه الحالة، Select Case
) كتلة - و / أو كتل متداخلة - لاختبار حالة واحدة؟ هذا ربما أسرع من if
مباشرة؟
المحلول
إذا كنت قلقا حول أداء ... الشخصي. وإلا لا يمكنك الذهاب الخطأ المخطئين على جانب القراءة ...
نصائح أخرى
وأنا لا أعتقد أنه يهم في الواقع من حيث السرعة، وينبغي أن يكون المترجم قادرا على تحسين ذلك.
وأعتقد أنه سيكون مجرد مسألة تفضيل.
وبلدي وبحكم التجربة هو أن استخدام عبارة التبديل عندما يكون عدد من إذا / الشروط شيء آخر أكبر من الثلاثة. ليس لدي أي بيانات وراء لماذا هذا الأمر يبدو معقولا تماما بخلاف قراءة / الصيانة ويبدو أن الانخفاض حيث بلغ عدد إذا زاد / شيء آخر الشروط.
وأعتقد أن الإجابة في حالة معينة كنت قد أعطيت ليست - أنه لا معنى له، كما هو مقترح في إجابات أخرى المرء يأمل أن المجمعين أن تحسين بعيدا أي خلافات العملية
.وكنت وضعت المال على هذا يجري قليلا من قطع ولصق وحذف الترميز - اتخاذ مجموعة المعمم للبيانات حالة متداخلة واستخراج أن بت واحد والتي تمنحك نعم / لا نتيجة تحتاج
.إذا كان هذا شيئا من هذا القبيل في الخط و / أو كان هناك استدعاء دالة حيث تم تعيين علامة عودة ثم ربما واحدة، ربما تكون في نقطة حيث يمكن للمرء أن يبدأ لتبرير ذلك، ولكن ليس كما هو عليه.