بناء الجملة:"الخروج من الباطن" أو "العودة" في الإجراءات الفرعية لـ VB.NET

StackOverflow https://stackoverflow.com/questions/1004657

سؤال

يبدو أن كلا من "الخروج الفرعي" أو "العودة" يحققان نفس الشيء - الخروج من الروتين الفرعي.هل هناك فرق في كيفية عملهم تحت الأغطية؟

إنه،

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top