إذا علينا المخبأ في Var محلي في إجراء، فهل سيساعدك أو هي نفسها؟

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

سؤال

لذلك نحن ندير أداة جودة رمز يسمى العفن مرة واحدة في حين كجزء من مشروعنا. تبدو الأداة أساسا لرائحة التعليمات البرمجية وتقاريرها. هنا، لاحظنا أننا نحصل على رائحة "الازدواجية" في كل مرة نحاول الوصول إليها params أكثر من مرة (كما لو أننا نقوم بإجراء طريقة - استدعاء مرتين بنفس المعلمات أو نحن نسخين إذا شرط بعد ذلك). ومع ذلك، params ما هو الا Hash, ، الصحيح؟ لا تحصل عمليات الفحص الأخرى على رائحة ازدواجية عند الوصول إلى مفاتيحها أكثر من مرة.

لماذا هو كذلك؟ ماذا يكون params بالضبط؟ هل من المنطقي التخزين المؤقت params في متغير محلي ثم استخدامها؟ هل ستساعد أو هي نفسها؟ أو هل هناك شيء خاطئ مع الأداة؟ مساعدة!

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

المحلول

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

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

نصائح أخرى

Params هي استدعاء طريقة لا @params ||= @request.params

قد يكون ذلك أنه يعتقد أن المعالم هي طريقة معقدة، لذلك تريد منك أن تحاول أن تخزنها في متغير، ولكن لا تعتقد أن هذا سيكون يستحق كل هذا العناء خاصة لأنه يتم حفظه (استنادا إلى Rack_Process.rb من القضبان 2.2)

params[:foo] هي طريقة نداء Hash#[], ، لذلك Reek هو الصحيح. أنا لست على دراية ب Reek، لذلك لا أستطيع أن أقول لماذا لا تحصل على الوصول إلى التجزئة الأخرى نفس الشيء. Hash#[] يجب أن تكون سريعة بما فيه الكفاية أنك لا تحتاج إلى تخزينها في متغير محلي إلا إذا كنت في الجزء الحرج الأداء للغاية من التعليمات البرمجية الخاصة بك.

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

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

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