سؤال

أقوم بإعادة كتابة سلسلة من وظائف PHP إلى فئة الحاوية. تقوم العديد من هذه الوظائف ببعض المعالجة ، ولكن في النهاية ، فقط صدى المحتوى إلى stdout.

سؤالي هو: هل يجب أن يكون لدي قيمة إرجاع ضمن هذه الوظائف؟ هل هناك "أفضل ممارسة" فيما يتعلق بهذا؟

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

المحلول

في الأنظمة التي تبلغ عن أخطاء في المقام الأول من خلال الاستثناءات ، لا تُرجع قيمة الإرجاع إذا لم تكن هناك قيمة طبيعية.

في الأنظمة التي تستخدم قيم الإرجاع للإشارة إلى الأخطاء ، من المفيد أن تُرجع جميع الوظائف رمز الخطأ. وبهذه الطريقة ، يمكن للمستخدم ببساطة أن يفترض أن كل وظيفة تُرجع رمز الخطأ وتطوير نمط للتحقق من أنه يتبعه في كل مكان. حتى لو لم تتمكن الوظيفة من فشل الآن في الوقت الحالي ، فإن إرجاع رمز النجاح. وبهذه الطريقة ، إذا كان التغيير المستقبلي يجعل من الممكن أن يكون لديك خطأ ، فسيقوم المستخدمون بالفعل بفحص الأخطاء بدلاً من تجاهلها بصمت (والارتباك حقًا لماذا يتصرف النظام بشكل غريب).

نصائح أخرى

هل يمكن للمعالجة أن تفشل؟ إذا كان الأمر كذلك ، هل يجب على المتصل أن يعرف ذلك؟ إذا كان أي من هذه لا ، فأنا لا أرى قيمة في عائد. ومع ذلك ، إذا كانت المعالجة قد تفشل ، ويمكن أن تحدث فرقًا في المتصل ، فأنا أقترح إرجاع حالة أو رمز الخطأ.

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

سأعود في كثير من الأحيان "صحيح:" في هذه الحالات ، لأنها توفر طريقة للتحقق من أن الوظيفة تعمل. لست متأكدا من أفضل الممارسات على الرغم من.

لاحظ أنه في C/C ++ ، وظائف الإخراج (بما في ذلك printf ()) إرجاع عدد البايتات المكتوبة ، أو -1 إذا فشل هذا. قد يكون من المفيد التحقيق في هذا الأمر كذلك لمعرفة سبب القيام به مثل هذا. أنا أعترف بذلك

  1. لست متأكدًا من أن الكتابة إلى stdout يمكن أن تفشل عملياً (إلا إذا أغلقت دفق stdout الخاص بك بنشاط)
  2. لدي أبداً شاهد أي شخص يجمع هذه القيمة ، ناهيك عن فعل أي شيء معه.

لاحظ أن هذا متميز من الكتابة إلى تدفقات الملفات - أنا لا أحسب إعادة توجيه الدفق في القشرة.

للقيام بالشيء "الصحيح" ، إذا كانت الهدف من الطريقة هي طباعة البيانات فقط ، فلا ينبغي أن تُرجع أي شيء.

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

فى النهايه الاختيار لك. أود أن أقول أن هذا يعتمد على مقدار "purist" أنت حول مثل هذه الأشياء.

يجب عليك فقط:

return;

في رأيي ، ينطبق SRP (مبدأ المسؤولية الفردية) على الأساليب/الوظائف أيضًا ، وليس فقط للكائنات. يجب أن تفعل إحدى الطرق شيئًا واحدًا ، إذا قام بإخراج البيانات ، فلا ينبغي لها القيام بأي معالجة للبيانات - إذا لم يتم معالجتها ، فلا ينبغي لإرجاع البيانات.

ليست هناك حاجة لإعادة أي شيء ، أو في الواقع الحصول على بيان العودة. إنها وظيفة باطلة بشكل فعال ، وهي مفهومة بما فيه الكفاية بحيث لا يكون لها قيمة إرجاع. وضع "عودة" فقط ل لديك بيان العودة هو الضوضاء من أجل pedantry.

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