सामान्य उपयोग के लिए ऑटो को नापसंद करने के कई कारण हैं:
- आप इसे संशोधित किए बिना कोड को रीफ़्रैक्टर कर सकते हैं। हां, यह उन चीजों में से एक है जिन्हें अक्सर ऑटो का उपयोग करने के लाभ के रूप में सूचीबद्ध किया जाता है। बस एक फ़ंक्शन के रिटर्न प्रकार को बदलें, और अगर कोड के सभी जो इसे ऑटो का उपयोग करता है, कोई अतिरिक्त प्रयास की आवश्यकता नहीं है! आप संकलित करते हैं, यह बनाता है - 0 चेतावनियाँ, 0 त्रुटियां - और आप आगे बढ़ते हैं और अपने कोड की जांच करते हैं बिना देखने की गड़बड़ी से निपटने के लिए और संभवतः 80 स्थानों को संशोधित करने के लिए फ़ंक्शन का उपयोग किया जाता है।
लेकिन रुकिए, क्या यह वास्तव में एक अच्छा विचार है? यदि उन उपयोग-मामलों के आधा दर्जन मामलों में टाइप किया जाता है, और अब वह कोड वास्तव में अलग तरह से व्यवहार करता है तो क्या होगा? यह न केवल इनपुट मूल्यों को संशोधित करके, बल्कि फ़ंक्शन को कॉल करने वाली अन्य कक्षाओं के निजी कार्यान्वयन के व्यवहार को भी स्पष्ट कर सकता है।
1 क। मैं "स्व-दस्तावेज कोड" की अवधारणा में विश्वास करता हूं। सेल्फ-डॉक्यूमेंटिंग कोड के पीछे तर्क यह है कि टिप्पणियां आउट-ऑफ-डेट हो जाती हैं, अब यह नहीं दर्शाता है कि कोड क्या कर रहा है, जबकि कोड स्वयं - यदि स्पष्ट तरीके से लिखा गया है - स्व-व्याख्यात्मक है, तो हमेशा अद्यतित रहता है अपने इरादे पर, और आपको बासी टिप्पणियों से भ्रमित नहीं करेगा। यदि कोड को संशोधित करने की आवश्यकता के बिना प्रकार बदले जा सकते हैं, तो कोड / चर स्वयं बासी हो सकते हैं। उदाहरण के लिए:
ऑटो bThreadOK = CheckThreadHealth ();
समस्या को छोड़कर यह है कि CheckThreadHealth () कुछ बिंदु पर एक ब्यूम के बजाय त्रुटि स्थिति, यदि कोई हो, का संकेत करने वाले एक एनुम मान को वापस करने के लिए वापस ले लिया गया था। लेकिन उस बदलाव को करने वाले व्यक्ति कोड की इस विशेष रेखा का निरीक्षण करने से चूक गए, और संकलक को कोई मदद नहीं मिली क्योंकि यह चेतावनी या त्रुटियों के बिना संकलित था।
- आप कभी नहीं जान सकते कि वास्तविक प्रकार क्या हैं। यह अक्सर ऑटो के प्राथमिक "लाभ" के रूप में भी सूचीबद्ध होता है। क्यों जानें कि एक फ़ंक्शन आपको क्या दे रहा है, जब आप बस कह सकते हैं, "कौन परवाह करता है? यह संकलन करता है!"
यह भी इस तरह के काम करता है, शायद। मैं कहता हूं कि काम करता है, क्योंकि भले ही आप प्रत्येक लूप पुनरावृत्ति के लिए 500 बाइट संरचना की एक प्रति बना रहे हैं, इसलिए आप इस पर एक भी मूल्य का निरीक्षण कर सकते हैं, कोड अभी भी पूरी तरह कार्यात्मक है। यहां तक कि आपकी इकाई परीक्षण भी आपको यह महसूस करने में मदद नहीं करते हैं कि बुरा कोड उस सरल और निर्दोष दिखने वाले ऑटो के पीछे छिपा है। फ़ाइल के माध्यम से स्कैन करने वाले अधिकांश अन्य लोग इसे पहली नज़र में भी नोटिस नहीं करेंगे।
यह भी बदतर बनाया जा सकता है यदि आप नहीं जानते कि प्रकार क्या है, लेकिन आप एक चर नाम चुनते हैं जो गलत धारणा बनाता है कि यह क्या है, वास्तव में 1 ए के रूप में एक ही परिणाम प्राप्त करना, लेकिन इसके बजाय बहुत शुरुआत से बाद refactor।
- कोड लिखना जब शुरू में लिखते हैं तो यह प्रोग्रामिंग का सबसे अधिक समय लेने वाला हिस्सा नहीं होता है। हां, ऑटो शुरू में कुछ कोड तेजी से लिखता है। डिस्क्लेमर के रूप में, मैं टाइप करता हूं> 100 WPM, इसलिए शायद यह मुझे उतना परेशान न करे जितना दूसरों को। लेकिन अगर मुझे पूरा दिन नया कोड लिखना होता तो मैं एक खुश रहने वाला टूरिस्ट होता। प्रोग्रामिंग का सबसे अधिक समय लेने वाला हिस्सा कोड में हार्ड-टू-प्रजनन, एज-केस बग्स का निदान कर रहा है, जो अक्सर सूक्ष्म गैर-स्पष्ट समस्याओं से उत्पन्न होता है - जैसे कि ऑटो का अत्यधिक उपयोग शुरू होने की संभावना है (संदर्भ बनाम कॉपी,) हस्ताक्षर किए बनाम अहस्ताक्षरित, फ्लोट बनाम इंट, बूल बनाम पॉइंटर, आदि)।
यह मुझे स्पष्ट लगता है कि ऑटो को मुख्य रूप से मानक पुस्तकालय टेम्पलेट प्रकारों के साथ भयानक सिंटैक्स के लिए एक समाधान के रूप में पेश किया गया था। टेम्पलेट सिंटैक्स को ठीक करने की कोशिश करने के बजाय, जो लोग पहले से ही परिचित हैं - जो मौजूदा कोड के सभी होने के कारण लगभग असंभव भी हो सकता है - मूल रूप से समस्या को छिपाने वाले कीवर्ड में जोड़ें। अनिवार्य रूप से जिसे आप "हैक" कह सकते हैं।
मुझे वास्तव में मानक पुस्तकालय कंटेनरों के साथ ऑटो के उपयोग से कोई असहमति नहीं है। यह स्पष्ट रूप से है कि खोजशब्द किस लिए बनाया गया था, और मानक पुस्तकालय में कार्यों का उद्देश्य (या उस मामले के लिए प्रकार) में मूलभूत रूप से परिवर्तन की संभावना नहीं है, जिससे ऑटो का उपयोग करने के लिए अपेक्षाकृत सुरक्षित हो जाता है। लेकिन मैं इसे अपने स्वयं के कोड और इंटरफेस के साथ उपयोग करने के बारे में बहुत सतर्क रहूंगा जो अधिक अस्थिर हो सकते हैं, और संभवतः अधिक मूलभूत परिवर्तनों के अधीन हो सकते हैं।
ऑटो का एक और उपयोगी अनुप्रयोग जो भाषा की क्षमता को बढ़ाता है, जो टाइप-अज्ञेय मैक्रोज़ में अस्थायीता पैदा कर रहा है। यह कुछ ऐसा है जो आप वास्तव में पहले नहीं कर सकते थे, लेकिन अब आप कर सकते हैं।
auto
अक्सर चीजों को पढ़ना मुश्किल हो जाता है जब वे पहले से ही पढ़ने में कठिन होते हैं, यानी, बहुत लंबे समय तक कार्य करना, चरों का नाम खराब होना आदि। शालीनता से नामांकित चर के साथ छोटे कार्यों पर, प्रकारों को जानना # 1 आसान या # 2 अप्रासंगिक में से एक होना चाहिए।