سؤال

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

وعلى سبيل المثال (في جاوة) - هل هناك أي سبب لاستخدام الخيار 2:

public class Something
{
    private int messageId;
    public int getMessageId() { return this.messageId; }
    public void setMessage(int messageId) { this.messageId = messageId; }

    public void doSomething()
    {
        // Option 1:
        doSomethingWithMessageId(messageId);

        // Option 2:
        doSomethingWithMessageId(getMessageId());
    }
}
هل كانت مفيدة؟

المحلول

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

وانا اقول طالما كنت <م> لا جعل جالبة كل شيء على مايرام لاستخدام متغير الخام - ل <م> متغيرات خاصة. عند إجراء جالبة، يجب أن تكون باستخدام تلك فقط. عندما أقوم بإجراء جالبة لحقل الخاص، تشير IDE لي أنه يحل محل الحقل الخام المنافذ بالنسبة لي تلقائيا عند إدخال جالبة. التحول إلى استخدام جالبة ليست سوى بضع ضربات المفاتيح بعيدا (ودون أي فرصة لإدخال أخطاء)، لذلك أنا أميل إلى تأخيرها حتى أنا في حاجة إليها.

وبطبيعة الحال، إذا كنت ترغب في الاشياء مثل جالبة الحقن، وبعض أنواع إنشاء الوكلاء وإن شاء subclasses ترث framworks مثل السبات، لديك لحاصل المستعمل!

نصائح أخرى

ومع حاصل كنت متعود تعديل بطريق الخطأ المتغيرات :) أيضا، إذا كنت تستخدم كلا حاصل والمتغير "الخام"، يمكن أن التعليمات البرمجية خلط.

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

إذا كنت تستخدم طريقة جالبة في كل مكان - وفي المستقبل إجراء رمز البحث على جميع المكالمات من getMessageId () سوف تجد كل منهم، في حين إذا كنت قد استخدمت تلك خاصة، قد يغيب عن بعض

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

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

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

وهنا مثال (في C #):

public class Something {

   private string _value;

   public string Value {
      get {
         return _value;
      }
      set {
         if (value == null) throw new ArgumentNullException();
         _value = value;
      }
   }

   public Something() {
      // using a known value
      _value = "undefined";
   }

   public Something(string initValue) {
      // using an unknown value
      Value = initValue;
   }

}

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

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