سؤال

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

class Category
  TYPES = %w(listing event business).freeze
end

أو

class Category
  @@types = %w(listing event business).freeze
  cattr_reader :types
end

هي الظروف التي تفضل فيها أحدهما؟ أم أنها مجرد مسألة ذوق / نمط؟

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

المحلول

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

نصائح أخرى

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

إذا كنت تخطط لتعيين و / أو تغيير هذه القيم ديناميكيا أثناء التنفيذ، فاستخدم متغير الفئة مع Getters و Setters.

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

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

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

الرجوع إلى الإجابات هنا لأكثر من ذلك على هذا: متغيرات الطبقة في روبي

إذا كنت ترغب في جعل خاصتك المستمرة، فيمكنك دائما القيام به:

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