यहां संबोधित करने के लिए दो मुद्दों कर रहे हैं: एक रिफैक्टरिंग इस प्रकार की समस्या के लिए विशेष रूप नहीं है पठनीयता और understandability
"पठनीयता" समाधान एक शैली मुद्दा है और इस तरह के रूप व्याख्या के लिए खुला है ।
if (var1 == true && // Explanation of the check
var2 == true && // Explanation of the check
var3 == true && // Explanation of the check
var4 == true && // Explanation of the check
var5 == true && // Explanation of the check
var6 == true) // Explanation of the check
{ }
या इस: मेरी प्राथमिकता यह है
if (var1 && // Explanation of the check
var2 && // Explanation of the check
var3 && // Explanation of the check
var4 && // Explanation of the check
var5 && // Explanation of the check
var6) // Explanation of the check
{ }
जिसके अनुसार, जटिल जांच के इस प्रकार (कोड को स्कैन करते समय मानसिक रूप से पार्स करने के लिए विशेष रूप से यदि आप मूल के लेखक नहीं हैं काफी मुश्किल हो सकता)। दूर जटिलता के कुछ सार करने के लिए एक सहायक विधि बनाने पर विचार करें: जब नेत्रहीन "SomeMethod" विधि स्कैनिंग अब
/// <Summary>
/// Tests whether all the conditions are appropriately met
/// </Summary>
private bool AreAllConditionsMet (
bool var1,
bool var2,
bool var3,
bool var4,
bool var5,
bool var6)
{
return (
var1 && // Explanation of the check
var2 && // Explanation of the check
var3 && // Explanation of the check
var4 && // Explanation of the check
var5 && // Explanation of the check
var6); // Explanation of the check
}
private void SomeMethod()
{
// Do some stuff (including declare the required variables)
if (AreAllConditionsMet (var1, var2, var3, var4, var5, var6))
{
// Do something
}
}
, परीक्षण तर्क की वास्तविक जटिलता छिपा है, लेकिन अर्थ अर्थ मनुष्य में समझने के लिए संरक्षित है एक उच्च स्तर। यदि डेवलपर को वास्तव में विवरणों को समझने की आवश्यकता है, तो AreAllConditionsMet विधि की जांच की जा सकती है।
यह औपचारिक रूप से मुझे लगता है कि "विघटनशील सशर्त" रिफैक्टरिंग पैटर्न के रूप में जाना जाता है। Resharper या रिफैक्टर प्रो जैसे उपकरण! इस प्रकार के रिफैक्टरिंग को आसान बना सकते हैं!
सभी मामलों में, पठनीय और समझने योग्य कोड रखने की कुंजी यथार्थवादी परिवर्तनीय नामों का उपयोग करना है। जबकि मैं समझता हूं कि यह एक संक्षिप्त उदाहरण है, "var1", "var2", आदि स्वीकार्य परिवर्तनीय नाम नहीं हैं। उनके पास एक ऐसा नाम होना चाहिए जो उनके द्वारा प्रस्तुत डेटा की अंतर्निहित प्रकृति को दर्शाता हो।
>>> L = [True, True, True, False, True]
>>> all(L) # True, only if all elements of L are True.
False
>>> any(L) # True, if any elements of L are True.
True
वहाँ है:
सरल, आसानी से करते हैं, और प्रभावी बढ़ाता है के साथ गलत कुछ भी नहीं है। –