إذا
في مجال الحوسبة ، تُعدّ IIf (اختصارًا لـ Immediate if [ 1 ] ) دالةً في العديد من إصدارات لغة البرمجة Visual Basic ولغة ColdFusion Markup Language (CFML)، وفي جداول البيانات ، تُعيد المعامل الثاني أو الثالث بناءً على تقييم المعامل الأول. وهي مثال على التعبير الشرطي، الذي يُشبه العبارة الشرطية .
بناء الجملة
صيغة دالة IIf هي كما يلي:
IIf ( expr , truepart , falsepart )
جميع المعايير الثلاثة مطلوبة:
- expr هو التعبير الذي سيتم تقييمه.
- يحدد الجزء الصحيح (truepart)
IIfما تُرجعه الدالة إذا كانت نتيجة تقييم التعبير (expr) صحيحة (true). - يُحدد الجزء الخاطئ ما
IIfتُرجعه الدالة إذا كانت نتيجة تقييم التعبير خاطئة.
تحتوي العديد من لغات البرمجة على مُعامل لتحقيق نفس الغرض، يُشار إليه عمومًا باسم المُعامل الشرطي (أو، بشكل أقل دقة، المُعامل الثلاثي)؛ وأشهرها ?: ، كما هو مُستخدم في لغات C وC++ واللغات المُشابهة. بعض المشاكل المُصاحبة لدالة IIf، كما سيتم توضيحه لاحقًا، غير موجودة مع المُعامل الشرطي، لأن اللغة حرة في فحص نوع المُعاملات وتأخير تقييمها، بدلًا من تمريرها ببساطة إلى دالة مكتبة.
أمثلة
تقوم هذه الأمثلة بتقييم التعبيرات الرياضية وإرجاع إحدى سلسلتين نصيتين اعتمادًا على النتيجة.
result = IIf (5 < 10, "نعم، هذا صحيح" ، "لا، هذا ليس صحيحًا") ' تُرجع "نعم، هذا صحيح"
result = IIf (2 + 2 = 5, "صحيح", "خطأ" ) ' تُرجع "خطأ"
الانتقادات
كفاءة
لأنها IIfدالة مكتبة، فإنها ستتطلب دائمًا تكلفة استدعاء دالة، في حين أن عامل التشغيل الشرطي من المرجح أن ينتج عنه رمز مضمن.
علاوة على ذلك، فإن نوع بيانات وسائطها هو Variant. إذا تم استدعاء الدالة بوسائط من أنواع أخرى (متغيرات أو قيم حرفية)، فسيكون هناك عبء إضافي لتحويلها إلى Variant. قد يكون هناك أيضًا عبء إضافي للتحقق من أنواع الوسائط وتحويل أحدها إذا لم يكن من نفس النوع.
تأثيرات جانبية
تظهر مشكلة أخرى IIfلأنها دالة مكتبة: على عكس عامل الشرط المشتق من لغة C، سيتم تقييم كل من الجزء الصحيح والجزء الخاطئ بغض النظر عن القيمة المُعادة فعليًا. في مقتطف الشفرة التالي:
القيمة = 10 result = IIf(value = 10, TrueFunction , FalseFunction )
على الرغم من أن الدالة TrueFunction هي الدالة المقصودة، IIfإلا أنها ستستدعي كلاً من TrueFunction و FalseFunction . وبالمثل،
أ = 10 ب = 0 النتيجة = IIf ( ب <> 0 ، أ / ب ، 0 )على الرغم من أن الهدف قد يكون تجنب القسمة على صفر، إلا أن الخطأ سيحدث فعليًا عندما تكون قيمة b صفرًا. وذلك لأن الكود في المقتطف يُنفذ كما لو كان...
a = 10 b = 0 _temp1 = b <> 0 _temp2 = a / b ' خطأ إذا b = 0 _temp3 = 0 إذا _temp1 فإن النتيجة = _temp2 وإلا فإن النتيجة = _temp3 نهاية الشرطتُقلل هذه المشكلة IIf()من فائدة الاستدعاء مقارنةً بالمعامل الشرطي. ولحل هذه المشكلة، فكّر مطورو مايكروسوفت [ 2 ] في التحويل IIfإلى دالة داخلية؛ ولو حدث ذلك، لكان بإمكان المُصرّف استنتاج النوع واختصار الدائرة باستبدال استدعاء الدالة بشفرة مضمنة.
بدائل لـ IIf
في لغة Visual Basic ، لا تعتبر IIf الطريقة الوحيدة لتقييم وتنفيذ الإجراءات بناءً على ما إذا كان التعبير صحيحًا أم خاطئًا.
يستخدم المثال التالي IIf:
النتيجة = IIf (x = y, value1, value2)
ويمكن كتابتها أيضاً بالطريقة التالية، باستخدام العبارات الشرطية القياسية :
إذا كان x = y فإن النتيجة = القيمة 1، وإلا فإن النتيجة = القيمة 2 .سيؤدي المثال أعلاه أيضًا إلى التخلص من مشكلة قيام IIf بتقييم كل من معلمات truepart و falsepart الخاصة بها.
قدّمت لغة Visual Basic 2008 (VB 9.0) عاملًا شرطيًا حقيقيًا ، يُسمى ببساطة "If"، والذي يُزيل هذه المشكلة أيضًا. صيغته مشابهة لصيغة الدالة IIf.
النتيجة = إذا ( س = ص ، القيمة1 ، القيمة2 )إذا كان ذلك في لغات برمجة أخرى
$iif()موجود في نص mIRC ، بصيغة مماثلة.
alias testiif { %testiif = 0 صدى -a $iif(1,$testiif2,$testiif2) %testiif تنفيذ (عمليات) إلغاء تعيين %testiif } الاسم المستعار testiif2 { بما في ذلك %testiif | اختبار الإرجاع $!iif: } سيؤدي استدعاء الدالة /testiifإلى طباعة "اختبار $iif: تنفيذ واحد". $iifيتصرف mIRC بشكل أقرب إلى لغة C ?:منه IIf()إلى VB لأنه لا يقوم بتقييم كليهما مسبقًا.
IIF()هي دالة في dBase و xBase (1992 والإصدارات الأقدم).
iif()وهي أيضاً دالة سحرية خاصة بالمترجم في مكتبة Oxygene . إنها ليست دالة حقيقية، ويتم فكها في وقت الترجمة إلى عبارات شرطية.
var someString := iif ( someInt > 35 , 'Large' , 'Small' ) ;في هذا المثال، يتم إنشاء سلسلة نصية جديدة من النوع القوي باسم "someString" (باستخدام استنتاج النوع ) وستقوم الدالة iifبملئها اعتمادًا على نتيجة التعبير المنطقي.
يدعم SQL Server 2012 والإصدارات الأحدث وظيفة IIF() ( Transact-SQL ):
DECLARE @a int = 45 ; DECLARE @b int = 40 ; SELECT IIF ( @a > @b , ' TRUE ' , ' FALSE ' ) AS Result ;في لغة C (ومتغيراتها) ولغة Perl ، يكون المعامل الشرطي ?: هو :
printf ( "العدد %d زوجي %s" , num , num % 2 ? "ليس زوجيًا" : "" );IIf في بايثون :
التكافؤ = "فردي" إذا كان n % 2 وإلا "زوجي"إذا كان (أي منهما) في الأحمر والثورة :
التكافؤ: هل هو فردي؟ ن [ 'فردي ' ' زوجي ' ]مراجع
- ↑ "كيفية استخدام دالة IIf() (الشرط الفوري)" . 2004-06-08 . تم الاطلاع عليه بتاريخ 2007-05-09 .
- ↑ بول فيك (29 ديسمبر 2006). "IIF، عامل ثلاثي حقيقي والتوافق مع الإصدارات السابقة" . مؤرشف من الأصل في 22 يناير 2007. تم الاطلاع عليه في 1 فبراير 2007 .
روابط خارجية
- مايكروسوفت فيجوال ستوديو
- البنى الشرطية
- لغة البرمجة الأساسية
