पठनीयता का पीछा करते हुए स्पष्टता त्यागने से सावधान रहें ।
हालांकि , if (user.ExistsInDatabase(db))
अच्छे से पढ़ता है if (user.CheckExistsInDatabase(db))
, एक बिल्डर पैटर्न के साथ एक वर्ग के मामले पर विचार करें, (या कोई भी वर्ग जिसे आप राज्य स्थापित कर सकते हैं):
user.WithName("Mike").ExistsInDatabase(db).ExistsInDatabase(db2).Build();
यह स्पष्ट नहीं ExistsInDatabase
है कि यह जाँच रहा है कि क्या यह मौजूद है, या इस तथ्य को स्थापित करता है कि यह मौजूद है। आप लिखेंगे if (user.Age())
या if (user.Name())
बिना किसी तुलना मूल्य के, ऐसा क्यों हैif (user.Exists())
विशुद्ध रूप एक अच्छा विचार क्योंकि वह संपत्ति / कार्य बूलियन प्रकार का है और आप प्राकृतिक अंग्रेजी की तरह अधिक पढ़ने के लिए फ़ंक्शन / संपत्ति का नाम बदल सकते हैं? क्या यह उसी पैटर्न का पालन करने के लिए बुरा है जो हम बूलियन के अलावा अन्य प्रकारों के लिए उपयोग करते हैं?
अन्य प्रकारों के साथ, एक if
कथन फ़ंक्शन के रिटर्न मान की तुलना कोड में मान से करता है, इसलिए कोड कुछ इस तरह दिखता है:
if (user.GetAge() >= 18) ...
जो यह पढ़ता है कि "अगर यूजर डॉट प्राप्त होता है तो उम्र 18 से अधिक या उसके बराबर है ..." सच है - यह "प्राकृतिक अंग्रेजी" नहीं है, लेकिन मैं यह तर्क दूंगा कि object.verb
कभी भी प्राकृतिक अंग्रेजी जैसा नहीं होता है और यह केवल आधुनिक प्रोग्रामिंग का एक मूल पहलू है (के लिए) कई मुख्यधारा की भाषाएँ)। प्रोग्रामर को आम तौर पर उपरोक्त कथन को समझने में कोई समस्या नहीं होती है, इसलिए निम्नलिखित कोई भी बदतर है?
if (user.CheckExists() == true)
जिसे आम तौर पर छोटा कर दिया जाता है
if (user.CheckExists())
घातक कदम से पीछा किया
if (user.Exists())
जबकि यह कहा गया है कि "कोड लिखित की तुलना में 10 गुना अधिक बार पढ़ा जाता है", यह भी बहुत महत्वपूर्ण है कि बग को स्पॉट करना आसान है। मान लीजिए कि आपके पास एक फ़ंक्शन होता है, जिसका नाम एक्ज़िस्ट () होता है, जो ऑब्जेक्ट के अस्तित्व का कारण बनता है, और सफलता के आधार पर सही / गलत रिटर्न देता है। आप आसानी से कोड देख सकते हैंif (user.Exists())
और बग को नहीं - यदि कोड if (user.SetExists())
उदाहरण के लिए पढ़ा जाता है , तो बग बहुत अधिक स्पष्ट होगा ।
इसके अतिरिक्त, user.Exists () आसानी से कुछ की जाँच करने के लिए एक डेटाबेस के लिए जटिल या अक्षम कोड, राउंड ट्रिपिंग शामिल कर सकते हैं। user.CheckExists () यह स्पष्ट करता है कि फ़ंक्शन कुछ करता है।
यहां सभी प्रतिक्रियाओं को भी देखें: नामकरण परंपराएं: एक विधि का नाम क्या है जो एक बूलियन लौटाता है?
अंतिम नोट के रूप में - "बताओ मत पूछो" के बाद, बहुत सारे फ़ंक्शंस जो वैसे भी सच / झूठ गायब हो जाते हैं, और इसके राज्य के लिए एक वस्तु पूछने के बजाय, आप इसे कुछ करने के लिए कहते हैं, जो इसे अलग-अलग तरीके से कर सकता है इसके राज्य के आधार पर तरीके।
isBabbyFormed