यहां एक उदाहरण है जब झंडे उपयोगी होते हैं।
मेरे पास एक कोड है जो पासवर्ड उत्पन्न करता है (एक क्रिप्टोग्राफिक रूप से सुरक्षित छद्म आयामी संख्या जनरेटर का उपयोग करके)। विधि का कॉलर यह चुनता है कि पासवर्ड में बड़े अक्षरों, छोटे अक्षरों, अंकों, मूल प्रतीकों, विस्तारित प्रतीकों, ग्रीक प्रतीकों, सिरिलिक वाले और यूनिकोड शामिल हैं या नहीं।
झंडे के साथ, इस विधि को कॉल करना आसान है:
var password = this.PasswordGenerator.Generate(
CharacterSet.Digits | CharacterSet.LowercaseLetters | CharacterSet.UppercaseLetters);
और इसे सरल भी किया जा सकता है:
var password = this.PasswordGenerator.Generate(CharacterSet.LettersAndDigits);
झंडे के बिना, विधि हस्ताक्षर क्या होगा?
public byte[] Generate(
bool uppercaseLetters, bool lowercaseLetters, bool digits, bool basicSymbols,
bool extendedSymbols, bool greekLetters, bool cyrillicLetters, bool unicode);
इस तरह कहा जाता है:
// Very readable, isn't it?
// Tell me just by looking at this code what symbols do I want to be included?
var password = this.PasswordGenerator.Generate(
true, true, true, false, false, false, false, false);
जैसा कि टिप्पणियों में कहा गया है, एक संग्रह का उपयोग करने के लिए एक और दृष्टिकोण होगा:
var password = this.PasswordGenerator.Generate(
new []
{
CharacterSet.Digits,
CharacterSet.LowercaseLetters,
CharacterSet.UppercaseLetters,
});
यह और अधिक पठनीय है के सेट की तुलना में true
और false
, लेकिन अभी भी दो कमियां भी हैं:
मुख्य दोष यह है कि संयुक्त मूल्यों को अनुमति देने के लिए, जैसे CharacterSet.LettersAndDigits
आप Generate()
विधि में ऐसा कुछ लिख रहे होंगे :
if (set.Contains(CharacterSet.LowercaseLetters) ||
set.Contains(CharacterSet.Letters) ||
set.Contains(CharacterSet.LettersAndDigits) ||
set.Contains(CharacterSet.Default) ||
set.Contains(CharacterSet.All))
{
// The password should contain lowercase letters.
}
संभवतः इस तरह से फिर से लिखा गया है:
var lowercaseGroups = new []
{
CharacterSet.LowercaseLetters,
CharacterSet.Letters,
CharacterSet.LettersAndDigits,
CharacterSet.Default,
CharacterSet.All,
};
if (lowercaseGroups.Any(s => set.Contains(s)))
{
// The password should contain lowercase letters.
}
झंडे का उपयोग करके आपके पास इसकी तुलना करें:
if (set & CharacterSet.LowercaseLetters == CharacterSet.LowercaseLetters)
{
// The password should contain lowercase letters.
}
दूसरा, बहुत मामूली दोष यह है कि यह स्पष्ट नहीं है कि अगर इस तरह कहा जाता है तो विधि कैसे व्यवहार करेगी:
var password = this.PasswordGenerator.Generate(
new []
{
CharacterSet.Digits,
CharacterSet.LettersAndDigits, // So digits are requested two times.
});