विचार करें:
1. भाषा
Using का उपयोग करना अधिकतम के लिए एक समाधान हो सकता है।
उदाहरण के लिए, जावास्क्रिप्ट में एक अनन्तता है। C # does¹।
उदाहरण के लिए, एडा की सीमाएँ हैं। सी # नहीं है।
C # में, है int.MaxValue
, लेकिन आप इसे अपने मामले में उपयोग नहीं कर सकते। int.MaxValue
अधिकतम पूर्णांक है, 2,147,483,647। यदि आपके कोड में, आपके पास किसी चीज़ का अधिकतम मूल्य है, जैसे किसी चीज़ के विस्फोट से पहले अधिकतम स्वीकृत दबाव, तो 2,147,483,647 का उपयोग करने का कोई मतलब नहीं है।
2. ढाँचा
.NET फ्रेमवर्क इस बिंदु पर असंगत है, और इसके जादुई मूल्यों के उपयोग की आलोचना की जा सकती है।
उदाहरण के लिए, "Hello".IndexOf("Z")
एक जादुई मूल्य लौटाता है -1
। यह हो सकता है आसान बना देता है (यह करता है?) परिणाम में हेरफेर करने के:
int position = "Hello".IndexOf("Z");
if (position > 0)
{
DoSomething(position);
}
कस्टम संरचना का उपयोग करने के बजाय:
SearchOccurrence occurrence = "Hello".IndexOf("Z");
if (occurrence.IsFound)
{
DoSomething(occurrence.StartOffset);
}
लेकिन सहज नहीं है। क्यों -1
और क्या नहीं -123
? एक शुरुआत भी गलती से सोच सकता है कि 0
"नहीं मिला" या केवल गलत अर्थ है (position >= 0)
।
3. प्रसंग
यदि आपका कोड नेटवर्क सॉकेट्स में टाइमआउट से संबंधित है, तो कुछ का उपयोग करना जो दशकों से सभी के लिए सुसंगत होने के लिए उपयोग किया गया था एक बुरा विचार नहीं है । विशेष रूप से, 0
टाइमआउट के लिए बहुत स्पष्ट है: यह एक मूल्य है जो शून्य नहीं हो सकता है। इस मामले में एक कस्टम वर्ग का उपयोग करना चीजों को समझने में अधिक कठिन हो सकता है:
class Timeout
{
// A value indicating whether there is a timeout.
public bool IsTimeoutEnabled { get; set; }
// The duration of the timeout, in milliseconds.
public int Duration { get; set; }
}
- क्या मैं
Duration
0 पर सेट कर सकता हूँ अगर IsTimeoutEnabled
यह सच है?
- अगर
IsTimeoutEnabled
झूठा है, तो क्या होगा अगर मैं Duration
100 पर सेट हो जाऊं?
इससे कई गलतियाँ हो सकती हैं। निम्नलिखित कोड की कल्पना करें:
this.currentOperation.Timeout = new Timeout
{
// Set the timeout to 200 ms.; we don't want this operation to be longer than that.
Duration = 200,
};
this.currentOperation.Run();
ऑपरेशन दस सेकंड के लिए चलता है। क्या आप देख सकते हैं कि Timeout
कक्षा के प्रलेखन को पढ़े बिना इस कोड में क्या गलत है ?
निष्कर्ष
null
अच्छी तरह से विचार व्यक्त करता है कि मूल्य यहाँ नहीं है। यह प्रदान नहीं किया गया है। उपलब्ध नहीं है। यह न तो एक संख्या है, न ही एक शून्य / खाली स्ट्रिंग या जो भी। अधिकतम या न्यूनतम मूल्यों के लिए इसका उपयोग न करें।
int.MaxValue
भाषा से दृढ़ता से संबंधित है। कक्षा int.MaxValue
की अधिकतम गति सीमा Vehicle
या विमान, आदि के लिए अधिकतम स्वीकार्य गति का उपयोग न करें ।
-1
अपने कोड में जादू के मूल्यों से बचें । वे भ्रामक हैं और कोड में गलतियों को जन्म देते हैं।
अपना खुद का वर्ग बनाएं जो न्यूनतम / अधिकतम मूल्यों के साथ और अधिक सीधा होगा। उदाहरण के लिए VehicleSpeed
हो सकता है VehicleSpeed.MaxValue
।
किसी भी पिछले दिशानिर्देश का पालन न करें और जादू के मूल्यों का उपयोग करें यदि यह एक विशिष्ट क्षेत्र में दशकों के लिए एक सामान्य सम्मेलन है, जिसका उपयोग अधिकांश लोग इस क्षेत्र में कोड लिख रहे हैं।
दृष्टिकोण मिश्रण मत भूलना। उदाहरण के लिए:
class DnsQuery
{
public const int NoTimeout = 0;
public int Timeout { get; set; }
}
this.query.Timeout = 0; // For people who are familiar with timeouts set to zero.
// or
this.query.Timeout = DnsQuery.NoTimeout; // For other people.
Your आप अपना खुद का प्रकार बना सकते हैं जिसमें अनंत शामिल हैं। यहाँ, मैं int
केवल देशी प्रकार के बारे में बात कर रहा हूँ ।