الثوابت أو المتغيرات الطبقة في روبي؟
-
23-08-2019 - |
سؤال
لقد كنت برمجة في 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