सी # लैंगेज के लिए आवश्यक है कि सभी चर को निश्चित रूप से पढ़ने से पहले असाइन किया जाए। स्थानीय चर माना जाता है जिसे प्रारंभ में, जबकि फ़ील्ड, सरणी तत्व आदि शामिल हैं, को माना जाता है जो प्रारंभ में उनके डिफ़ॉल्ट मान को असाइन किया गया था। (जो, एक संदर्भ प्रकार के लिए, शून्य है।)
कोई तकनीकी कारण नहीं है कि हम स्थानीय चरों का इलाज क्यों नहीं कर सकते क्योंकि शुरुआत में उनके डिफ़ॉल्ट मानों को आवंटित किया गया था और सभी निश्चित असाइनमेंट जांच को फेंक दिया गया था। ऐसा इसलिए है क्योंकि एक असाइन किए गए स्थानीय का उपयोग इसके डिफ़ॉल्ट मान के रूप में (1) खराब कोडिंग अभ्यास है, और (2) परेशान करने वाली बग का एक अत्यधिक संभावित स्रोत है।स्थानीय उपयोगों को स्पष्ट रूप से उपयोग करने से पहले आपको स्पष्ट रूप से असाइन करने की आवश्यकता होती है, हम उपयोगकर्ता को खराब अभ्यास का उपयोग करने से रोकते हैं, और उन बग्स की पूरी कक्षा को खत्म करते हैं जिन्हें आपने कभी डीबग नहीं किया है।
इसके अलावा, पर विचार करें:
while(whatever)
{
int i;
print(i);
i = i + 1;
}
आप मैं पाश के लिए सजा भर में अपने मूल्य पकड़ करने की उम्मीद है, या के लिए यह हर बार शून्य पर ताजा प्रारंभ करने के लिए है? आपको इसे स्पष्ट रूप से प्रारंभ करने के लिए मजबूर कर, सवाल बेकार हो जाता है और यह एक अंतर है जो कोई फर्क नहीं पड़ता।
(इसके अलावा, ऊपर दिए गए मामले में एक छोटा संभावित प्रदर्शन अनुकूलन है, जिसमें संकलक अपनी सामग्री को साफ़ करने के लिए कोड उत्पन्न किए बिना चर का उपयोग कर सकता है क्योंकि संकलक जानता है कि आप सामग्री साफ़ करेंगे ।)
मुझे नहीं पता कि आपके दूसरे प्रश्न का उत्तर कैसे दिया जाए क्योंकि मुझे नहीं पता कि "काम" से आपका क्या मतलब है। क्या आप मुझे बता सकते हैं कि "int x = 123;" काम करता है? एक बार जब मैं जानता हूं कि "काम" से आपका क्या मतलब है तो मैं वर्णन कर सकता हूं कि संदर्भ प्रकार कार्यों के चर के लिए शून्य को कैसे असाइन करना है।
स्रोत
2010-01-06 14:53:06
क्या आप उन फ़ील्ड के बारे में बात कर रहे हैं जो संदर्भ-प्रकार हैं और अभी भी शून्य के रूप में प्रारंभ किए गए हैं? तो इतना अंतर क्यों? –
क्या बीच के बीच अंतर? स्थानीय होने के नाते या नहीं? –
@ मेहरदाद: मुझे लगता है कि वह जानना चाहता है कि क्यों स्थानीय चर स्वचालित रूप से फ़ील्ड के विपरीत उनके डिफ़ॉल्ट मान में प्रारंभ नहीं होते हैं। कारण यह है क्योंकि यह पहले से ही एक अनुकूलन है। कंपाइलर सुरक्षित रूप से कह सकता है कि स्थानीय चर को एक मान दिया गया है या नहीं। यदि यह संकलक नहीं है संकलन समय पर एक त्रुटि फेंक देगा। यह अनुकूलन फ़ील्ड के लिए संभव नहीं होगा। –