إذا, IIf() إذا()
-
09-06-2019 - |
سؤال
طلبت مؤخرا من سؤال حول IIf مقابلإذا وجدت أن هناك وظيفة أخرى في VB يسمى إذا الأساس الذي يفعل الشيء نفسه كما IIf بل هو ماس كهربائي.
هل هذا إذا وظيفة أداء أفضل من IIf وظيفة ؟ لا إذا البيان ورقة رابحة إذا و IIf الوظائف ؟
المحلول
تبا لقد ظننت حقا أنك تتحدث عن المشغل على طول.;-) على أي حال ...
لا هذا إذا كان وظيفة أداء أفضل من الدالة IIf?
بالتأكيد.تذكر, انها بنيت في اللغة.واحد فقط من اثنين من الحجج مشروطة لابد من تقييم تنقذ عملية مكلفة.
هل كان ورقة رابحة إذا IIf الوظائف ؟
أعتقد أنك لا يمكن المقارنة بينهما لأنها تفعل أشياء مختلفة.إذا كان لديك رمز لغويا ينفذ مهمة يجب أن نؤكد على هذا بدلا من اتخاذ القرار.استخدام If
مشغل هنا بدلا من البيان.هذا صحيح لا سيما إذا كان يمكنك استخدامه في تهيئة متغير لأن خلاف ذلك المتغير سوف يكون الافتراضي تهيئة ، مما أدى إلى تباطؤ كود:
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
' versus
Dim result As Double ' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
نصائح أخرى
واحد مهم جدا متميزة بين IIf()
و If()
هو أنه مع Option Infer On
في وقت لاحق سوف يلقي ضمنا النتائج على نفس نوع البيانات في بعض الحالات ، IIf
سيعود Object
.
على سبيل المثال:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
الإخراج:
iifVal
له قيمة من لا شيء و نوع الكائن
ifVal
له قيمة من 0 و نوع عدد صحيح ب/ج هو ضمنا تحويل أي شيء إلى عدد صحيح.