আমি প্রায়শই নিজেকে কোনও পদ্ধতি থেকে বুলেটিয়ান ফেরত পেতে দেখি যা একাধিক স্থানে ব্যবহৃত হয়, সেই পদ্ধতিটির চারপাশে সমস্ত যুক্তি এক জায়গায় রাখার জন্য। সমস্ত (অভ্যন্তরীণ) কলিং পদ্ধতিটি জানা দরকার যে অপারেশন সফল হয়েছিল কি না।
আমি পাইথন ব্যবহার করছি তবে প্রশ্নটি অবশ্যই সেই ভাষার সাথে নির্দিষ্ট নয়। আমি কেবল দুটি বিকল্পই ভাবতে পারি
- পরিস্থিতি ব্যতিক্রমী না হলেও একটি ব্যতিক্রম উত্থাপন করুন, এবং ফাংশনটি বলা হয় এমন জায়গাতেই সেই ব্যতিক্রমটি ধরা মনে রাখবেন
- আমি করছি বলে একটি বুলিয়ান ফেরত দিন।
এটি সত্যিই একটি সহজ উদাহরণ যা প্রমাণ করে যে আমি কী বলছি।
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()
যদিও এটি কার্যকরী, তবে কিছু করার এই পদ্ধতিটি আমি সত্যিই অপছন্দ করি, এটি "গন্ধযুক্ত" হয় এবং এর ফলে মাঝে মাঝে প্রচুর নেস্টেড আইএফ হতে পারে। তবে, আমি সহজ উপায় সম্পর্কে ভাবতে পারি না।
আমি আরও এলবিওয়াইএল দর্শনের দিকে ফিরে যেতে পারি এবং os.path.exists(filename)
মুছে ফেলার চেষ্টা করার আগে ব্যবহার করতে পারি তবে এর মধ্যে কোনও ফাইল লক না হওয়ার কোনও গ্যারান্টি নেই (এটি অসম্ভব তবে সম্ভব) এবং মুছে ফেলা সফল হয়েছে কিনা তা এখনও নির্ধারণ করতে হবে।
এটি কি একটি "গ্রহণযোগ্য" ডিজাইন এবং যদি না হয় তবে এটির নকশা করার আরও ভাল উপায় কী হতে পারে?