हाँ
आपको हमेशा कोष्ठक का उपयोग करना चाहिए ... आप पूर्वता के क्रम को नियंत्रित नहीं करते हैं ... संकलक का विकास करता है। यहाँ एक कहानी है जो मुझे कोष्ठक के गैर-उपयोग के बारे में हुई। इसने दो सप्ताह की अवधि में सैकड़ों लोगों को प्रभावित किया।
वास्तविक विश्व कारण
मुझे मेन-फ्रेम एप्लीकेशन विरासत में मिली। एक दिन, साफ नीले रंग से बाहर काम करना बंद कर दिया। यह बात है ... poof यह बस बंद कर दिया।
मेरा काम इसे जल्द से जल्द काम करवाना था। स्रोत कोड को दो साल के लिए संशोधित नहीं किया गया था, लेकिन अचानक इसे रोक दिया गया। मैंने कोड संकलित करने की कोशिश की और यह लाइन XX पर टूट गया। मैंने लाइन XX को देखा और मैं यह नहीं बता पाया कि लाइन XX ब्रेक क्या बना सकता है। मैंने इस एप्लिकेशन के लिए विस्तृत चश्मा मांगा और कोई नहीं था। रेखा XX अपराधी नहीं थी।
मैंने कोड का प्रिंट आउट लिया और ऊपर से नीचे की समीक्षा करना शुरू कर दिया। मैंने जो कुछ चल रहा था, उसका एक फ्लोचार्ट बनाना शुरू कर दिया। कोड इतना जटिल था कि मैं शायद ही इसके बारे में समझ सकता था। मैंने इसे प्रवाहित करने की कोशिश की। मुझे यह जानने के बिना बदलाव करने से डर था कि यह परिवर्तन बाकी प्रक्रिया को कैसे प्रभावित करेगा, खासकर क्योंकि मुझे इस बात का कोई विवरण नहीं था कि आवेदन क्या किया था या यह निर्भरता श्रृंखला में कहां था।
इसलिए, मैंने स्रोत कोड के शीर्ष पर शुरू करने और कोड को अधिक पठनीय बनाने के लिए व्हाट्सएप और लाइन ब्रेक को जोड़ने का फैसला किया। मैंने देखा है, कुछ मामलों में, वहाँ थे अगर स्थिति है कि संयुक्त ANDऔर ORऔर यह क्या डेटा किया जा रहा था के बीच स्पष्ट रूप से पहचाने नहीं था ANDएड और कौन-सा डेटा किया जा रहा था ORएड। इसलिए मैंने उन्हें और अधिक पठनीय बनाने के लिए ANDऔर ORशर्तों के आसपास कोष्ठक लगाना शुरू कर दिया ।
जैसा कि मैंने धीरे-धीरे इसे साफ करना शुरू कर दिया है, मैं समय-समय पर अपने काम को बचाऊंगा। एक बिंदु पर मैंने कोड को संकलित करने की कोशिश की और एक अजीब बात खुशी हुई। त्रुटि ने छलांग लगा दी थी कि वह कोड की मूल पंक्ति को पार कर गया था और अब नीचे आ गया था। तो मैं जारी रखा, ANDऔर ORparens के साथ शर्तों speparating । जब मैंने सफाई की तो यह काम कर गया। जाओ पता लगाओ।
मैंने तब संचालन की दुकान का दौरा करने और उनसे पूछने का फैसला किया कि क्या उन्होंने हाल ही में मुख्य-फ्रेम पर कोई नया घटक स्थापित किया है। उन्होंने कहा कि हां, हमने हाल ही में कंपाइलर को अपग्रेड किया है। Hmmmm।
यह पता चला है कि पुराने संकलक ने बिना किसी परवाह के बाएं से दाएं की अभिव्यक्ति का मूल्यांकन किया। संकलक के नए संस्करण ने भी बाएं से दाएं लेकिन अस्पष्ट कोड के भावों का मूल्यांकन किया, जिसका अर्थ अस्पष्ट संयोजन है ANDऔर ORइसे हल नहीं किया जा सकता है।
सबक मैंने इससे सीखा है ... ALWAYS, ALWAYS, ALWAYS अलग-अलग ANDस्थितियों और ORस्थितियों के लिए पैरेन्स का उपयोग करते हैं जब वे एक दूसरे के साथ संयोजन में उपयोग किए जाते हैं।
सरलीकृत उदाहरण
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...(इनमें से कई के साथ कोडित)
यह एक सरल संस्करण है जो मैंने सामना किया। कंपाउंड बूलियन लॉजिक स्टेटमेंट के साथ और भी स्थितियां थीं।
मुझे याद है कि इसका पीछा करना:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
मैं इसे फिर से नहीं लिख सकता क्योंकि कोई चश्मा नहीं था। मूल लेखक लंबे समय से चला गया था। मुझे गहन दबाव याद है। एक पूरा मालवाहक जहाज बंदरगाह में फंसा हुआ था और उसे लोड नहीं किया जा सकता था क्योंकि यह छोटा कार्यक्रम काम नहीं करता था। कोई चेतावनी नहीं। स्रोत कोड में कोई परिवर्तन नहीं। यह केवल मुझ पर नेटवर्क संचालन पूछने के लिए dawned अगर वे कुछ भी संशोधित करने के बाद मैंने देखा कि parens जोड़ने त्रुटियों को स्थानांतरित कर दिया।