मैं अक्सर खुद को एक विधि से बूलियन को वापस पाता हूं, जिसका उपयोग कई स्थानों पर किया जाता है, ताकि एक ही स्थान पर उस पद्धति के सभी तर्क समाहित किए जा सकें। सभी (आंतरिक) कॉलिंग विधि को यह जानना आवश्यक है कि ऑपरेशन सफल हुआ था, या नहीं।
मैं पायथन का उपयोग कर रहा हूं, लेकिन यह प्रश्न उस भाषा के लिए आवश्यक नहीं है। मेरे विचार से केवल दो विकल्प हैं
- एक अपवाद उठाएं, हालांकि परिस्थितियां असाधारण नहीं हैं, और उस अपवाद को पकड़ने के लिए याद रखें जहां हर जगह फ़ंक्शन को बुलाया जाता है
- मैं कर रहा हूँ के रूप में एक बूलियन लौटें।
यह एक बहुत ही सरल उदाहरण है जो दर्शाता है कि मैं किस बारे में बात कर रहा हूं।
import os
class DoSomething(object):
def remove_file(self, filename):
try:
os.remove(filename)
except OSError:
return False
return True
def process_file(self, filename):
do_something()
if remove_file(filename):
do_something_else()
यद्यपि यह कार्यात्मक है, मैं वास्तव में कुछ करने के इस तरीके को नापसंद करता हूं, यह "बदबू आ रही है", और कभी-कभी बहुत सारे नेस्टेड इफ़ेक्ट हो सकते हैं। लेकिन, मैं एक सरल तरीके के बारे में नहीं सोच सकता।
मैं एक और LBYL दर्शन और उपयोग की ओर मुड़ सकता हूं os.path.exists(filename)
विलोपन का प्रयास करने से पहले लेकिन इस बात की कोई गारंटी नहीं है कि फ़ाइल को इस बीच लॉक नहीं किया गया होगा (यह संभव नहीं है लेकिन संभव है) और मुझे अभी भी यह निर्धारित करना है कि विलोपन सफल रहा है या नहीं।
क्या यह एक "स्वीकार्य" डिज़ाइन है और यदि नहीं तो यह डिज़ाइन करने का एक बेहतर तरीका क्या होगा?