यह वास्तव में एक बल्कि व्यक्तिपरक विषय है। मेरे विचार में, लूप के दौरान तीन नेस्टेड के साथ मौलिक रूप से गलत कुछ भी नहीं है, लेकिन आप स्वीकार्यता की सीमा तक पहुंच रहे हैं। क्या आप घोंसले के एक या दो स्तरों को जोड़ना चाहते थे, तो आप मेरे विचार में, पाठक को समझने के लिए उचित होने की सीमा को पार करेंगे। मानव मस्तिष्क केवल समय पर किसी भी बिंदु पर इतनी जटिलता को संभाल सकता है।
कुछ लोग तर्क देंगे कि मेरी राय का मुकाबला होगा कि एक समारोह में घोंसले के एक से अधिक स्तर नहीं होने चाहिए, और कार्यों में कोड की लगभग 10 पंक्तियों से अधिक नहीं होना चाहिए। काउंटर तर्क यह है कि इस तरह की नीति के परिणामस्वरूप अधिक खंडित, विवादित कोड हो सकता है। अंगूठे का मेरा नियम यह है कि यदि आप कोड के एक हिस्से के लिए एक अच्छा फ़ंक्शन नाम नहीं सोच सकते हैं, तो शायद कोड का हिस्सा वास्तव में एक समारोह के रूप में अकेले खड़े होने का मतलब नहीं है।
इस तरीके को तोड़ने के तरीकों को देखते हुए, कुछ स्पष्ट विकल्प हैं।
- बाहरी समारोह
while
के शरीर को एक अलग समारोह में निकालें। वह निकाला गया कार्य एक पंक्ति को संसाधित करेगा। इसे पढ़ने और पढ़ने के लिए स्पष्ट करना आसान होगा।
while
लूप निकालें जो व्हाइटस्पेस को एक अलग फ़ंक्शन में छोड़ देता है। फिर से नाम करना आसान होगा और आपके कोड को पढ़ने में आसान बना देगा। आप व्हाइटस्पेस टिप्पणी को हटा देंगे क्योंकि निकाले गए फ़ंक्शन का नाम इसे अनावश्यक प्रदान करेगा। शायद यह करने लायक है।
आप इन विचारों को लागू किया है, तो आपके कोड एक छोटे से इस प्रकार दिखाई देंगे:
char* skipWhitespace(char* str)
{
while (isspace(*str))
str++;
return str;
}
void parseLine(char *lineStr)
{
charPtr = strtok(lineStr, DELIMITERS);
while (charPtr != NULL)
{
charPtr = skipWhitespace(charPtr);
puts(charPtr);
charPtr = strtok(NULL, DELIMITERS);
}
}
......
while (fgets(lineStr, MAXLINELENGTH, fp) != NULL)
parseLine(lineStr);
ध्यान दें कि रिफैक्टरिंग और निकाले तरीकों के नामकरण टिप्पणियां एक छोटे से ज़रूरत से ज़्यादा है और मैं उन्हें हटा दिया। अंगूठे का एक और अच्छा नियम यह है कि यदि आपको कोड को बहुत अधिक टिप्पणी करने की आवश्यकता है, तो शायद यह अभी तक अच्छी तरह से अनुकूल नहीं है।
आखिरकार, वास्तव में कठिन और तेज़ नियम नहीं हैं, और यह निर्णय और व्यक्तिगत वरीयता के लिए आता है। मेरे विचार में, प्रश्न में कोड बहुत स्पष्ट और पठनीय है, लेकिन मेरे विचार में, रिफैक्टर संस्करण सिर्फ थोड़ा स्पष्ट है।
अस्वीकरण: मैं कोड की शुद्धता या अन्यथा के बारे में कोई टिप्पणी नहीं करता हूं। मैंने बस उस पहलू को नजरअंदाज कर दिया।
नहीं, नेस्टेड लूप में कोई समस्या नहीं है। – pmg
यद्यपि, आप उनमें से कुछ को उन तरीकों से जोड़ना चाहते हैं जो वे कर रहे हैं यह दर्शाते हैं कि आखिरी व्यक्ति 'स्किपस्पेस()' या कुछ ऐसे हो जाता है। –
यदि इनपुट में ऋणात्मक वर्ण (* 127 * से बड़े मानों के साथ) हो सकते हैं, तो आप अपरिभाषित व्यवहार से बचने के लिए तर्क को 'जारीस्थान' पर डालना चाहते हैं: 'जारीस्थान ((हस्ताक्षरित चार) * charPtr) ' – pmg