سؤال

لقد سمعت أنه في C ++، باستخدام ملحق ( get...() ) في وظيفة عضو من نفس الفئة حيث تم تحديد الملحق هو ممارسة برمجة جيدة؟ هل صحيح وينبغي القيام به؟

على سبيل المثال، هذا هو المفضل:

void display() {
    cout << getData();
}

أكثر من شيء مثل هذا:

void display() {
    cout << data;
}

data هو عضو بيانات في نفس الفئة حيث تم تعريف الملحق ... نفسه مع display() طريقة.

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

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

المحلول

السبب في ذلك هو أنه إذا قمت بتغيير تنفيذ getData(), ، لن تضطر إلى تغيير بقية التعليمات البرمجية التي تصل مباشرة data.

وأيضا، سوف يتلاشى مترجم ذكي على أي حال (سيعرف دائما التنفيذ داخل الفصل)، لذلك لا توجد عقوبة في الأداء.

نصائح أخرى

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

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

شخصيا، لا أعتقد أن المقالات يستحق كل هذا العناء في معظم الحالات.

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

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

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

هتافات !

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

السبب الحقيقي للمستفيدين هو توفير تغليف الحقول الخاصة بك إلى فصول أخرى - وأقل عن الفئة المحتوية.

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

يعتمد ذلك على ما قد تفعله في النهاية مع عضو البيانات الخاص بك أفترض.

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

في رأيي، فإن الجانب الأكثر أهمية في هذا السؤال هو جعل الرمز أكثر قابلية للقراءة وبالتالي فيمكن للصيانة؟ أنا شخصيا لا أعتقد أنه لا أفعل ذلك.
بالتأكيد يجب ألا تضيف أبدا ملحق خاص للقيام بذلك، من شأنه أن يكون cnuts.

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