متى يتم تمرير المعلمة ومتى يتم استخدام متغير مثيل

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

  •  19-08-2019
  •  | 
  •  

سؤال

كيف يمكنكم يا رفاق أن تقرروا بين تتبع شيء ما محليًا ثم تمريره إلى كل طريقة تستدعيه، أو الإعلان عن متغير مثيل واستخدامه في الطرق؟

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

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

المحلول

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

  • تعتبر متغيرات المثيل عادةً سمات لفئة ما. فكر في هذه كصفات للكائن الذي سيتم إنشاؤه من صفك.إذا كان من الممكن استخدام بيانات المثيل الخاصة بك للمساعدة في وصف الكائن، فمن الآمن المراهنة على أنه اختيار جيد لبيانات المثيل.

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

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

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

نصائح أخرى

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

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

في رأيي، والمتغيرات سبيل المثال ليست سوى اللازمة عندما سيتم استخدام البيانات عبر المكالمات.

وهنا مثال:

myCircle = myDrawing.drawCircle(center, radius);

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

ومن ناحية أخرى، فإن الطبقة myCircle تحتاج إلى تخزين كل مركز ونصف قطر كمتغيرات المثال.

myCircle.move(newCenter);
myCircle.resize(newRadius);

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

وذلك في الأساس، والمتغيرات سبيل المثال هي وسيلة لانقاذ "الدولة" كائن. إذا متغير وليس من الضروري أن تعرف الدولة كائن، ثم لا ينبغي أن يكون متغير مثيل.

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

وIMHO:

وإذا كان الجزء أشكال مختلفة من حالة سبيل المثال، فإنه يجب أن يكون متغير مثيل - classinstance HAS-A instancevariable

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

ونأمل أن يساعد

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

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

وأعتقد أيضا حول الأمن ومتغير الفئة العامة هو عرضة للتغييرات غير مرغوب فيها من التعليمات البرمجية "خارج". وينبغي أن يكون الهدف الرئيسي للحفاظ على جميع المتغيرات الخاصة، وأي متغير وهو لم يكن كذلك، يجب أن يكون هناك سبب وجيه جدا أن تكون كذلك.

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

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

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