سؤال

النظر في المثال التالي المفتعلة:

void HandleThat() { ... }

void HandleThis()
{
    if (That) return HandleThat();
    ...
}

يعمل هذا الرمز على ما يرام، وأنا متأكد من أنه من الأفضل إلى حد ما، لكنني (ربما بمفردي) النظر في هذا النمط غير العادي، حيث يبدو أن المكالمة لإرجاع نتيجة الوظيفة، على الرغم من حقيقة أن كلا الوظائف هي النماذج الأولية أن تكون باطلة.

عادة، كنت أتوقع أن أرى:

if (That) {HandleThat(); return;}

التي، أشعر، لا تترك أي غموض لما يحدث.

إذن المجتمع، هل يمكنني الحصول على رأيك حول ما إذا كان أسلوب الترميز العائد الفراغ مربك أم إشكالية؟ لديها شعور بالصاصة؛ هل يجب علي استخدام هذا أو تجنبه؟

عموما سأستعى إلى الوضوح واستخدم النمط الثاني. من ناحية أخرى، هناك أنيقا للنموذج الأول الذي يرسمني إلى حد ما.

هل كانت مفيدة؟

المحلول

وأنا أتفق معك، النمط الأول مربك لأن هناك ضمنية على إرجاع نوع من القيمة. في الواقع كان علي أن أقرأها على مدى عدة مرات لأن من ذلك.

عند إرجاعها من الفراغ النموذجي للوطل، يجب أن تعود فقط؛

نصائح أخرى

ربما هذا هو مجرد ذكي للغاية. إذا انتهى هذا الخط أكثر من بضع خطوط بعيدا عن الجزء العلوي من الوظيفة، فسوف يكون مربكا. وهذا يعني أيضا أن مبرمج يبحث في التعليمات البرمجية سيحتاج إلى ربط

return HandleThat();

مع عودة نوع الفراغ ومعرفة الذكاء قبل أن يفهمون حقا الكود. عند قيامك بأكثر من شيء في فرع if / آخر، يجب عليك حقا استخدام الأقواس ووضع الخطوات على خطوط مختلفة. يأخذ مساحة أكبر ولكن من الأسهل فهم:

if (That) {
    HandleThat();
    return;
}

تقول قواعد اللغة C إذا حاولت وظيفة المعلنة كأداة إرجاع إرجاع تعبير، فلن يتم تقييم التعبير.

http://c0x.coding-gueding-gued.com/6.8.6.4.html.

لم أر ذلك من قبل.

لديها ميزة تبدو وكأنها مصبوغة مشتركة لأنواع العودة غير الفراغ، لذلك يقرأ بسهولة جدا ...

لن أغيره ما لم يتمكن شخص ما هو غير صالح.

أعتقد أن الإصدار الأول يسمح بشكل أساسي بتخفيف برمجة القوالب. إذا عدت HandleThat من النوع T والتي قد لا تكون أو لا تكون باطلة، فمن المريح استخدام الإصدار الأول.

ولكن في الحالات "العادية"، فإن النسخة الثانية أكثر وضوحا وأفضل ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top