بناء الجملة:"الخروج من الباطن" أو "العودة" في الإجراءات الفرعية لـ VB.NET
-
05-07-2019 - |
سؤال
يبدو أن كلا من "الخروج الفرعي" أو "العودة" يحققان نفس الشيء - الخروج من الروتين الفرعي.هل هناك فرق في كيفية عملهم تحت الأغطية؟
إنه،
Private Sub exitNow()
Exit Sub
End Sub
أو
Private Sub exitNow()
Return
End Sub
المحلول
من وثيقة:
<اقتباس فقرة>في فرعي أو مجموعة إجراءات، وبيان العودة، وهو يعادل الفرعية أو إنهاء بيان خروج الممتلكات، ويجب ألا يتم توفير التعبير.
اقتباس فقرة>وحتى انهم نفسه في هذا السياق.
نصائح أخرى
وأنا أميل إلى تفضيل Return
على Exit Sub
. لمرة واحدة في أثناء تغيير من Sub
إلى Function
. في هذه الحالة Exit Sub
يمكن تحويلها إلى Exit Function
، ولكن هذا يفترض أن هناك مهمة السابق إلى اسم الدالة (VB على حد سواء 6)، والتي على الأرجح لم يحدث. سوف Return
التقاط هذا الوضع - إذا يجب أن الأسلوب بإرجاع قيمة، سوف Return
مع عدم وجود حجة تفشل في وقت الترجمة
إذا كنت تفقد الناتج IL البيانات 2، أنها هي نفسها. ومع ذلك، منذ "العودة" هو المقصود لدفع شيء إلى المتصل، حتى بالمعنى الدقيق للكلمة، "Sub إنهاء" هو أكثر ملاءمة للاستخدام في الفرعية.
وأنها هي نفسها في هذا السياق.
ولكن، من وجهة كود قراءة للعرض، "إنهاء الفرعية" سيكون أكثر وضوحا منذ "العودة" يدل على أن يستخدم شيئا بعض القيمة كمخرج (الذي ليس هو الحال مع إجراءات الفرعية).
- بداية، الإجراءات تأتي فرعية، يجب أن نعلم أننا نعمل على إجراءات محددة لا ترجع قيمة محددة مع إمكانية تمرير بعض المعلمات المحددة أو حتى بدون تمرير أي معلمة.مثل:
- طباعة شيء ().
- حساب مضروب العدد الصحيح
CalcFact(X)
. القيام ببعض العمليات لمهمة محددة.
الوظيفة هي عملية محددة مبرمجة لتحقيق مهمة محددة عن طريق تمرير بعض المعلمات المحددة أيضًا، ويجب عليها إرجاع بعض القيمة التي يمكن استخدامها لإكمال المهمة الإجمالية، مثل التحقق من صحة اسم المستخدم وتصريح المستخدم.
باختصار Sub لا يُرجع قيمة ونحن نسميها مباشرة "Print HelloWorld()"
، في حين أن الوظائف تفعل مثل:
ValidUsersNameAndPass("Johne","jOhNe13042019")
"قد يؤدي هذا إلى إرجاع قيمة منطقية.ValidUsersNameAndPass("Johne","jOhNe13042019");
// قد يُرجع هذا قيمة منطقية.
وفي حين أن هناك استثناءات مثل بنود حارس، في معظم الحالات سوف تنظر في أي علامة على أن هذه الطريقة وقتا طويلا.
وأردت للتأكد من أنها تعمل نفس الشيء في تعبيرات لامدا جدا، ويفعلون:
Sub test()
Dim a As Action = Sub() Exit Sub
Dim b As Action = Sub() Return
a()
b()
MsgBox("Yes they do!")
End Sub