बूलियन विधि नामकरण सकारात्मक बनाम नकारात्मक


43

क्या बूलियन तरीकों को हमेशा सकारात्मक रूप लेना चाहिए, तब भी जब वे केवल नकारात्मक रूप में ही उपयोग किए जाएंगे?

कहते हैं कि मैं जाँच करना चाहता था कि क्या एक इकाई एक बनाने से पहले मौजूद है, मेरा तर्क यह है कि नीचे का पहला रूप दूसरे रूप से बेहतर है, चाहे वह तरीका कभी भी सकारात्मक रूप में उपयोग किया गया हो या नहीं।

संक्षेप में, मुझे if(!affirmative)पढ़ने में आसान लगता है if(negative)। मेरा एक सहयोगी है जो विचारों से असहमत है?

पहला रूप:

int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);

दूसरा फॉर्म:

int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);

3
सी ++? कैसे के बारे मेंif (not entity_exists(entity_id))
कोस


-म-टू-टू-मह-टू। ईमानदारी से, मैंने !चरित्र को बहुत बार याद किया है, जिससे मुझे कोड को गलत तरीके से समझने में मदद मिली जब तक कि मैंने इसे फिर से नहीं पढ़ा। इसलिए मैं शायद आपके सहकर्मी से अधिक सहमत हूं। जब आप इसकी जांच करते हैं तो मुझे वह रूप पसंद होता है जो सत्य का मूल्यांकन करता है।
बेरिन लोरिट्श

बस यह कहने के लिए झंकार करना चाहता था कि if (!exists) create()इसे कई भाषाओं / रूपरेखाओं में एक बुरे अभ्यास के रूप में देखा जा सकता है, क्योंकि यह थ्रेड-सुरक्षित नहीं है। आमतौर पर, पसंदीदा दृष्टिकोण यह create()कहता है कि विशिष्ट अपवादों या रिटर्न कोड को कॉल करना और संभालना है, जो कि इकाई पहले से मौजूद है। यह निश्चित रूप से वास्तविक प्रश्न का उत्तर नहीं है (यही कारण है कि यह केवल एक टिप्पणी है)।
जूलियागॉन

जवाबों:


61

क्या बूलियन तरीकों को हमेशा सकारात्मक रूप लेना चाहिए, तब भी जब वे केवल नकारात्मक रूप में ही उपयोग किए जाएंगे?

इस तरह की चीजों के बारे में नियम बनाना थोड़ा ज्यादा लगता है - मैं कोडिंग मानकों के दस्तावेज़ में एक दिशानिर्देश देखना नहीं चाहूंगा जो कहता है कि आप बूलियन गुणों के लिए नकारात्मक नामों का उपयोग नहीं करेंगे । लेकिन व्यक्तिगत शैली के रूप में, मुझे लगता है कि नामों को सकारात्मक रखने की कोशिश करना एक अच्छा आदर्श हो सकता है। हालाँकि, मुझे लगता है कि उस पतले और आसानी से छूटने की ज़रूरत से बचना भी अच्छा है !। एक नकारात्मक नाम को सकारात्मक में बदलने के तरीके अक्सर मिल सकते हैं:

  • accountHasCharges
  • accountIsClear(समान !accountHasCharges)

स्पष्टता सबसे महत्वपूर्ण विचार है, और नकारात्मक विधि के नामों से बचने का एक अच्छा कारण यह है कि वे दोहरे नकारात्मक या बदतर हो सकते हैं:

  • isComplete // ठीक है
  • isNotComplete //! पूर्ण आमतौर पर बेहतर है
  • isIncomplete // यह समझ सकता है कि 'अपूर्ण' वस्तु की ज्ञात स्थिति है
  • !isNotComplete // भयानक
  • !isNotComplete == 0 // स्थायी अवकाश हो सकता है

5
"मैं कोडिंग मानकों के दस्तावेज़ में एक दिशानिर्देश देखना नहीं चाहूंगा जो कहता है कि आप बूलियन गुणों के लिए नकारात्मक नामों का उपयोग नहीं करेंगे ।" - मैं इसे यहाँ छोड़ दूँगा ...
आकाश

16
आप भूल गए!isNotIncomplete
बेन ली

तो के विपरीत होता entity_existsहो entity_should_be_created(बजाय entity_not_exists)? या शायद entity_missingदान के सुझाव के अनुसार?
ADTC

1
यह वह जगह है जहाँ एक कोडिंग मानक दस्तावेज़ "पसंद" या "चाहिए" के बजाय "पसंद" शब्द का उपयोग कर सकता है।
वेन कॉनराड

15

मैं सहमत हूं कि सकारात्मक पढ़ने में आसान है। आप कोशिश कर सकते हैं

तीसरा रूप

int entity_id = 42;
if (entity_is_missing(entity_id)) create_entity(entity_id);

या

चौथा रूप

int entity_id = 42;
if (is_entity_missing(entity_id)) create_entity(entity_id);

2

यह इस बात पर भी निर्भर करता है कि आपकी विधि का उपयोग कैसे किया जा रहा है। यदि यह सकारात्मक और नकारात्मक दोनों मामलों में उपयोग किया जा रहा है, जैसे

if (!entity_exists(entity_id)) create_entity(entity_id);

if (entity_exists(entity_id)) publish_entity(entity_id);

फिर विधि नाम ऊपर की तरह, सकारात्मक में होना चाहिए। यदि आप सुनिश्चित नहीं हैं कि इसका उपयोग कैसे होने वाला है, तो ऊपर से चिपका दें।

लेकिन अगर यह केवल नकारात्मक मामले में उपयोग किया जाता है, तो निम्नलिखित स्वीकार्य है (शायद वांछनीय भी)

if (entity_not_exists(entity_id)) create_entity(entity_id);

या इससे भी अधिक प्रभावशाली होने के लिए इसे बेहतर बनाते हैं

if (entity_is_absent(entity_id)) create_entity(entity_id);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.