सूचकांक के लिए "असाइनमेंट शाखा शर्त आकार कितना ऊंचा है" काम कैसे करता है? - रूबी, कोड-मेट्रिक्स, rubocop

रूबोकॉप हमेशा त्रुटि की रिपोर्ट करता है:

एप्लिकेशन / नियंत्रक / account_controller.rb: 5: 3: C: अनुक्रमणिका के लिए असाइनमेंट शाखा स्थिति का आकार बहुत अधिक है। [30.95 / 24]

if params[:role]
@users = @search.result.where(:role => params[:role])
elsif params[:q] && params[:q][:s].include?("count")
@users = @search.result.order(params[:q][:s])
else
@users = @search.result
end

इसे कैसे जोड़ेंगे? किसी को भी अच्छा विचार है?

उत्तर:

उत्तर № 1 के लिए 12

The एबीसी आकार [1][2] है

असाइनमेंट की संख्या की गणना करके गणना की गई,कोड के एक खंड के लिए शाखाएं और शर्तें। मूल सी ++ रिपोर्ट लेख में गिनती के नियम विशेष रूप से सी, सी ++ और जावा भाषाओं के लिए थे।

पिछले लिंक में विवरण है कि ए, बी और सी। एबीसी आकार के लिए क्या मायने रखता है, एक अदिश परिमाण है, एक त्रिकोणीय संबंध की याद दिलाता है:

|ABC| = sqrt((A*A)+(B*B)+(C*C))

वास्तव में, त्रुटि पर एक त्वरित गूगल से पता चलता है कि पहले अनुक्रमित पृष्ठ है विधि है कि संदेश renders के लिए Rubocop डॉक्स

चेतावनी ट्रिगर होने पर आपका रेपो या विश्लेषण टूल थ्रेशोल्ड राशि निर्धारित करेगा.

गणना, यदि आप स्वयं को लागू करना पसंद है ....

अपने कोड calcs के रूप में

(1+1+1)^2  +
(1+1+1+1+1+1+1+1+1+1+1+1+1)^2   +
(1+1+1+1)^2
=> 194

यही कारण है कि मूल्यों के साथ एक "अंधेरे" गणना मैं बना दिया है (1एस)। हालांकि, आप देख सकते हैं कि त्रुटि संख्या है कि शायद अब अपने एबीसी और दहलीज के रूप में समझ में आता है:

 [30.95/24]

तो पुलिस दहलीज है 24 और आपका ABC size है 30.95. यह हमें बताता है कि रूबोकॉप इंजन ए, बी, और सी के लिए अलग-अलग नंबर असाइन करता है।के रूप में अच्छी तरह से, विभिन्न प्रकार या असाइनमेंट (या बी या सी) अलग-अलग मान भी हो सकता है।E.G.a "सामान्य" असाइनमेंट x = y शायद एक जंजीर असाइनमेंट से कम रन बनाए हैं x = y = z = r

टी एल;डॉ. उत्तर

इस बिंदु पर, आप शायद कैसे अपने एबीसी आकार को कम करने के लिए एक काफी स्पष्ट विचार है.यदि नहीं:

  1. एक सरल तरीका यह सशर्त लेने के लिए अपने elsif और यह एक सहायक विधि में जगह है.
  2. के बाद से आप एक असाइन कर रहे हैं @ चर, और मोटे तौर पर एक से बुला के रूप में अच्छी तरह से, अपने कोड स्मृति का कोई encapsulation का उपयोग करता है.इस प्रकार, आप दोनों को स्थानांतरित कर सकते हैं if तथा elsif प्रत्येक अपने में कार्रवाई ब्लॉक load_search_users_by_role तथा load_search_users_by_order तरीकों।

संबंधित सवाल
सबसे लोकप्रिय