बताएं, सिद्धांतों से पूछें here जब मैं गेटर्स या सेटर्स का उपयोग करता हूं तो अक्सर मुझे चिपकाया जाता है, और लोग मुझे बताते हैं कि उनका उपयोग न करें। साइट स्पष्ट रूप से बताती है कि मुझे क्या करना चाहिए और मुझे क्या नहीं करना चाहिए, लेकिन यह वास्तव में यह नहीं बताता कि मुझे क्यों पूछना चाहिए, पूछने के बजाय। मुझे गेटर्स और सेटर्स का उपयोग करके अधिक कुशलता मिलती है, और मैं उनके साथ और अधिक कर सकता हूं।गेटर/सेटर बनाम "बताओ, पूछो मत" का उपयोग करना?
class Warrior {
unsigned int m_health;
unsigned int m_armor;
};
अब किसी एक विशेष हमले कि 5 सेकंड के लिए अपने कवच कम कर देता है के साथ अपने योद्धा पर हमला करता है:
विशेषताओं health
और armor
के साथ एक कक्षा Warrior
कल्पना कीजिए। सेटर के हैं का उपयोग करते हुए इसे इस तरह हो:
void Attacker::attack(Warrior *target)
{
target->setHealth(target->getHealth() - m_damage);
target->setArmor(target->getArmor() - 20);
// wait 5 seconds
target->setArmor(target->getArmor() + 20);
}
और साथ कहता हूं, यह इस (मुझे सही कर अगर मैं गलत हूँ) की तरह लग रहे हैं सिद्धांत मत पूछो:
void Attacker::attack(Warrior *target)
{
target->hurt(m_damage);
target->reduceArmor(20);
// wait 5 seconds
target->increaseArmor(20);
}
अब दूसरा स्पष्ट रूप से बेहतर दिखता है, लेकिन मुझे इसका वास्तविक लाभ नहीं मिल रहा है। आपको अभी भी वही मात्रा (increase
/decrease
बनाम set
/get
) की आवश्यकता है और आप पूछने का लाभ खो देते हैं कि आपको कभी पूछने की आवश्यकता है या नहीं। उदाहरण के लिए, आप योद्धाओं के स्वास्थ्य को 100 कैसे सेट करेंगे? आप कैसे पता लगाते हैं कि आपको heal
या hurt
का उपयोग करना चाहिए, और आपको कितना स्वास्थ्य ठीक करने या चोट पहुंचाने की आवश्यकता है?
इसके अलावा, मैं दुनिया के कुछ सर्वश्रेष्ठ प्रोग्रामर द्वारा सेटर्स और गेटर्स का उपयोग किया जा रहा हूं। अधिकांश एपीआई इसका इस्तेमाल, और यह एसटीडी lib में हर समय इस्तेमाल किया जा रहा:
for (i = 0; i < vector.size(); i++) {
my_func(i);
}
// vs.
vector.execForElements(my_func);
और यहाँ लोगों का मानना है है कि क्या मुझे एक लेख के बारे में कह जोड़ने, नहीं पूछ, या करने के लिए तय करने के लिए करता है, तो मेरे पास है 9 0% बड़ी कंपनियों (सेब, माइक्रोसॉफ्ट, एंड्रॉइड, अधिकांश खेलों इत्यादि) पर विश्वास करें जिन्होंने सफलतापूर्वक बहुत पैसा और कामकाजी कार्यक्रम किए हैं, यह समझना मेरे लिए मुश्किल है कि क्यों बताएंगे, टी पूछें एक अच्छा सिद्धांत हो।
मुझे इसका उपयोग क्यों करना चाहिए (मुझे चाहिए?) जब सब कुछ गेटर्स और सेटर्स के साथ आसान लगता है?
एक एकल एचपी या एकल कवच का उपयोग करने के बजाय, आप एक एचपी_रेक्शन सूची और armor_reduction सूची का उपयोग कर सकते हैं ताकि जब कई दुश्मन एक ही पीड़ित हो जाएं, तो वे स्वास्थ्य और कवच के लिए समान चर तक पहुंचने वाले एकाधिक धागे की वजह से स्वास्थ्य और कवच को नहीं देखते हैं । धागे में 5 सेकंड इंतजार करना है ना? आप कैसे सुनिश्चित कर सकते हैं कि यह बिल्कुल 5 सेकंड तक प्रतीक्षा करता है? आपको कार्य शेड्यूलर भी चाहिए। –
@huseyintugrulbuyukisik धन्यवाद, लेकिन मैं यहां एक कामकाजी गेम कोड करने की कोशिश नहीं कर रहा हूं ._। यह सिर्फ एक साधारण उदाहरण था –
फिर आप सबसे सरल असाइनिंग ऑपरेशंस के साथ जा सकते हैं। Warrior.HP- = 5; –