كيفية القيام بما يلي: تحديد ما إذا كان قد تم توفير معلمة اختيارية
عند يقوم إجراء بتعريف معلمة اختيارية, قد يكون ضرورياً تحديد ما اذا كانت التعليمات البرمجية المستدعية قد وفرت الوسيطة المطابقة أو حذفتها.
في حالة مقارنة قيمة المعلمة مساوية للقيمة الافتراضية له, قد يكون ذلك لأحد السببين المحتملين:
الـتعليمات البرمجية المستدعية حذفت الوسيطة في استدعاء الإجراء; أو
قامت التعليمات البرمجية المستدعية بتوفير الوسيطة بقيمة تساوي تماماً القيمة الافتراضية للمعلمة.
الـتعليمات البرمجية للاجراء لا يمكنها التمييز بين هذين الحتمالين. غالباً إنه لا يهم, ولكن في بعض الحالات قد يحتاج الاجراء إلى اتخاذ إجراءات مختلفة لكل احتمال. أفضل أسلوب متوفر هو تعريف قيمة مستبعدة كافتراضية, على الرغم من أن ذلك لا يضمن أن التعليمات البرمجية المستدعية لا يمكن أن توفرها.
إذا كان من الهام التأكد تماماً ما إذا كان البرنامج المستدعي وفر وسيطة اختيارية ، الطريقة الأكثر أماناً هو تعريف إصدارات محملة بشكل زائد للإجراء. راجع كيفية القيام بما يلي: تعريف الإصدارات المتعددة للإجراء و اعتبارات في إجراءات التحميل الزائد.
لتحديد ما إذا كان تم تمرير وسيطة إلى معلمة اختيارية
قم بـتعريف قيمة غير محتملة جداً كافتراضية للمعلمة.
إذا كانت المعلمة الاختيارية من نوع المرجع مثل String، يمكنك استخدام Nothing كقيمة افتراضية, ومعطى أن هذه ليست قيمة متوقعة للوسيطة.
في تعليمات برمجية الإجراء, قارن المعلمة مقابل القيمة الافتراضية واتخذ الإجراء المناسب.
التحميل الزائد لـإجراء مع معلمة اختيارية وبدونها
طريقة أخرى لتعريف إجراء مع معلمات اختيارية هو استخدام التحميل الزائد. إذا كان لديك معلمة اختيارية واحدة, يمكنك تعريف اصدارين محملين بشكل زائد للإجراء, أحدها يقبل المعلمة والآخر لا يقبلها. تزداد هذه الطريقة تعقيداً كلما زاد عدد المعلمات الاختيارية. ومع ذلك، ميزته هي أنه يمكنك التأكد تماماً ما إذا كان البرنامج المستدعي قد وفر كل وسيطة اختيارية.
لتعريف إصدارات مختلفة للإجراء لتغطية تضمين و حذف وسيطة
تعريف إصدار واحد من الإجراء مع معلمة في قائمة الوسائط. لا تقوم بتعريف معلمة كـ Optional.
قم بـتعريف إصدار أخر من الإجراء بدون معلمة. يجب أن يكون التصريح متطابق للموجود في الإصدار الأول في كل اعتبار أخر.
قم بـوضع التعليمات البرمجية المناسبة لكل استدعاء في إصدار التابعون للإجراء.
مثال
يقوم إجراء التالي بتعريف المعلمة الاختيارية office، ويقوم باختبارات للقيمة الافتراضية الخاصة به,QJZ، لمعرفة ما إذا كان قد تم حذفة في الاستدعاء:
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub
إذا لم قم التعليمات البرمجية المستدعية بتوفير قيمة لـ office في قائمة الوسائط Visual Basic تقوم بتوفير القيمة الافتراضية من "QJZ".
إذا كانت المعلمة الاختيارية من نوع المرجع مثل String، يمكنك استخدام لا شيء (Visual Basic) كقيمة افتراضية, ومعطى أن هذه ليست قيمة متوقعة للوسيطة.
لأمثله حول استخدام التحميل الزائد لتحديد ما إذا كان قد تم تمرير معلمة اختيارية, راجع كيفية القيام بما يلي: زيادة تحميل إجراء الذي يأخذ المعلمات الاختيارية.
راجع أيضًا:
المهام
كيفية القيام بما يلي: تعريف المعلمات الاختيارية للإجراء
كيفية القيام بما يلي: استدعاء إجراء الذي يأخذ معلمات اختيارية
المرجع
المبادئ
تمرير الوسائط بواسطة القيمة و بواسطة المرجع