প্রশ্ন 1:
এটি কি নতুন স্ট্রিমরিডার (ফাইলের নাম) ফেরতের কারণে; লুপ জন্য ভিতরে? বা এই ক্ষেত্রে আপনার কোনও লুপের দরকার নেই তা এই সত্য?
এর সাথে স্ট্রিমডারারের কোনও সম্পর্ক নেই। অ্যান্টি-প্যাটার্নটি উত্থাপিত হয় কারণ foreachএবং এর মধ্যে অভিপ্রায়গুলির স্পষ্ট দ্বন্দ্বের কারণে if:
এর উদ্দেশ্য কী foreach?
আমি ধরে নিলাম আপনার উত্তরটি এমন কিছু হবে: "আমি বারবার একটি নির্দিষ্ট কোডের টুকরোগুলি কার্যকর করতে চাই "
আপনি কতগুলি ফাইল প্রক্রিয়া করার প্রত্যাশা করছেন?
যেহেতু আপনার নির্দিষ্ট ফোল্ডারে কেবলমাত্র একটি নির্দিষ্ট ফাইলের নাম থাকতে পারে (এক্সটেনশন সহ), এটি প্রমাণ করে যে আপনার কোডটি একটি কার্যকর ফাইল খুঁজে পেতে পারে ।
আপনি অবিলম্বে কোনও মান ফিরিয়ে দিচ্ছেন তা দ্বারা এটিও নিশ্চিত হয়ে যায়। আপনি আসলে দ্বিতীয় ম্যাচটি সম্পর্কে চিন্তা করেন না, এমনকি এটি উপস্থিত থাকলেও।
এমন পরিস্থিতি রয়েছে যেখানে এটি কোনও বিরোধী-নিদর্শন নয়।
- আপনি যদি উপ-ডিরেক্টরিগুলিতে (
Directory.GetFiles(".", SearchOption.AllDirectories)) ও সন্ধান করেন তবে একই ফাইল নাম (এক্সটেনশন সহ) সহ একাধিক ফাইল সন্ধান করা সম্ভব
- আপনি যদি আংশিক ফাইলের সাথে মিল খুঁজে পান (যেমন প্রতিটি ফাইল যার নাম দিয়ে শুরু হয়
"Test_", বা প্রতিটি "*.zip"ফাইল)।
নোট করুন যে এই উভয় ক্ষেত্রেই আপনাকে একাধিক ম্যাচটি প্রকৃতপক্ষে প্রক্রিয়াকরণ করতে হবে এবং তাই অবিলম্বে কোনও মান ফেরত দেওয়া হবে না।
প্রশ্ন 2:
দ্বিতীয় উদাহরণটি ঠিক করার জন্য, আপনি কি এই বিবৃতিটি না দিয়ে এটিকে আবার লিখবেন এবং পরিবর্তে স্ট্রিমরেডারকে একটি ট্রাই-ক্যাচ ব্লক দিয়ে ঘিরে রাখবেন এবং যদি এটি ফাইলনটফাউন্ডএক্সেপশন নিক্ষেপ করে আপনি সেই অনুসারে ক্যাচ ব্লকে হ্যান্ডেল করেন?
ব্যতিক্রম ব্যয়বহুল। এগুলি কখনই সঠিক প্রবাহ যুক্তির পরিবর্তে ব্যবহার করা উচিত নয়। ব্যতিক্রমগুলি হ'ল তাদের নাম ব্যতিক্রমী পরিস্থিতিতে পরামর্শ দেয় ।
যে কারণে, আপনি এটি অপসারণ করা উচিত নয় if।
সফ্টওয়্যারইজাইনারিং.এসই-তে এই উত্তর অনুসারে :
সাধারণত, নিয়ন্ত্রণ প্রবাহের জন্য ব্যতিক্রমগুলির ব্যবহার একটি অ্যান্টি-প্যাটার্ন, উল্লেখযোগ্য পরিস্থিতি সহ- এবং ভাষা-নির্দিষ্ট কাশি ব্যতিক্রম কাশি।
কেন, সাধারণভাবে এটি একটি অ্যান্টি-প্যাটার্নের দ্রুত সংক্ষিপ্তসার হিসাবে:
- ব্যতিক্রমগুলি হ'ল সংক্ষেপে পরিশীলিত GOTO বিবৃতি
- ব্যতিক্রম সহ প্রোগ্রামিং, সুতরাং কোড পড়তে এবং বুঝতে আরও অসুবিধার দিকে নিয়ে যায়
- বেশিরভাগ ভাষায় ব্যতিক্রমগুলি ব্যবহার না করেই আপনার সমস্যার সমাধানের জন্য ডিজাইন করা বিদ্যমান নিয়ন্ত্রণ কাঠামো রয়েছে
- দক্ষতার জন্য যুক্তিগুলি আধুনিক সংকলকগুলির পক্ষে ঝোঁক হতে থাকে, যা নিয়ন্ত্রণ প্রবাহের জন্য ব্যতিক্রমগুলি ব্যবহৃত হয় না এমন ধারণার সাথে অনুকূল হয় to
আরও গভীরতর তথ্যের জন্য ওয়ার্ডের উইকিতে আলোচনাটি পড়ুন ।
আপনার যদি চেষ্টা / ক্যাপচারে এটি মোড়ানোর প্রয়োজন হয় তবে তা আপনার পরিস্থিতির উপর নির্ভর করে:
- আপনি সম্ভবত একটি দৌড়ের অবস্থার মুখোমুখি হতে যাচ্ছেন তা কতটা সম্ভব?
- আপনি কি প্রকৃতপক্ষে এই পরিস্থিতিটি পরিচালনা করতে সক্ষম, বা আপনি কী চান যে এই সমস্যাটি ব্যবহারকারীকে বুদবুদ করতে হবে কারণ আপনি কীভাবে এটি পরিচালনা করতে জানেন না।
কিছুই সবসময় "সর্বদা এটি ব্যবহার করুন" এর বিষয় নয়। আমার বক্তব্য প্রমাণ করতে:
পৃথক অধ্যয়ন প্রমাণিত হয়েছে যে আপনি যখন কোনও সুরক্ষা হেলমেট, সুরক্ষা গগলস এবং বুলেটপ্রুফ ন্যস্ত রাখেন তখন আপনার আহত হওয়ার সম্ভাবনা কম।
তাহলে কেন আমরা সকলেই এই সুরক্ষা সরঞ্জামটি সর্বদা পরা করি না?
এর সহজ উত্তর হ'ল কারণ সেগুলি পরিধানের ক্ষেত্রে অসুবিধা রয়েছে:
- এটির জন্য অর্থ ব্যয় হয়
- এটি আপনার চলাচলকে আরও জটিল করে তোলে
- এটি পরতে বেশ উষ্ণ হতে পারে।
এখন আমরা কোথাও পাচ্ছি: প্রো এবং কনস রয়েছে । অন্য কথায়, এটির ক্ষেত্রে কেবল এই সরঞ্জামগুলি পরিধান করা বোধগম্য হয় যেখানে প্রো-এর পক্ষপাতীদের চেয়ে বেশি ।
- নির্মাণকর্মীরা তাদের কাজের সময় কোনও আঘাতের শিকার হওয়ার সম্ভাবনা বেশি থাকে। সেফটি হেলমেট থেকে তারা উপকৃত হয়।
- অন্যদিকে অফিসের কর্মীদের আহত হওয়ার সম্ভাবনা অনেক কম। সুরক্ষা হেলমেট এটি মূল্যবান নয়।
- অফিসের কর্মীর তুলনায় সোয়াট দলের সদস্যের গুলি করার সম্ভাবনা অনেক বেশি।
আপনি কি চেষ্টা করে / ধরার জন্য কলটি আবৃত করবেন? এটির উপর নির্ভর করে যে এটি করার সুবিধাগুলি এটির বাস্তবায়নের ব্যয়কে ছাড়িয়ে যায় কিনা on
মনে রাখবেন যে অন্যরা তর্ক করতে পারে যে এটি কেবল মোড়ানোর জন্য কয়েকটি কীস্ট্রোক লাগবে, তাই এটি অবশ্যই করা উচিত। তবে এটি সম্পূর্ণ যুক্তি নয়:
- ব্যতিক্রমটি একবার ধরলে আপনাকে কী করতে হবে তা আপনাকে সিদ্ধান্ত নিতে হবে।
- যদি পুরো কোডবেজে বিভিন্ন ফাইলগুলিতে প্রচুর কল হয়, তবে চেষ্টা / ধরাতে একটি মুড়ানোর সিদ্ধান্ত নেওয়ার অর্থ সাধারণত আপনাকে এই সমস্ত কেস মোড়তে হবে । এটি প্রয়োগের জন্য প্রয়োজনীয় পরিমাণের পরিমাণে এটি নাটকীয় প্রভাব ফেলতে পারে।
- এটি পুরোপুরি সম্ভব যে আপনি ইচ্ছাকৃতভাবে কোনও ব্যতিক্রম পরিচালনা করতে চান না ।
- মনে রাখবেন যে আপনার অ্যাপ্লিকেশনটি কোনও সময়ে ব্যতিক্রমটি পরিচালনা করতে হবে , তবে ব্যতিক্রমটি উত্থাপিত হওয়ার সাথে সাথে এটি অগত্যা নয়।
সুতরাং পছন্দ আপনার হয়। এটা করে লাভ আছে কি? আপনি কি মনে করেন যে এটি প্রয়োগের জন্য ব্যয় করার চেয়ে বেশি, অ্যাপ্লিকেশনটিকে উন্নত করে?
আপডেট - আমি একটি মন্তব্য থেকে অন্য উত্তরে লিখেছিলাম, কারণ আমি মনে করি এটি আপনার জন্যও প্রাসঙ্গিক বিবেচনা:
এটি খুব আশেপাশের প্রসঙ্গে h
- যদি স্ট্রিমডিডারটি খোলার আগে হয়
if(!File.Exists) File.Create()তবে স্ট্রিমরিডারটি খোলার সময় ফাইলটির অনুপস্থিতি অবশ্যই ব্যতিক্রমী ।
- যদি বিদ্যমান ফাইলগুলির একটি তালিকা থেকে ফাইলের নামটি নির্বাচিত করা হয়, তবে এর হঠাৎ অনুপস্থিতি আবার ব্যতিক্রম ।
- আপনি যদি এমন স্ট্রিং নিয়ে কাজ করছেন যা আপনি এখনও ডিরেক্টরিটির বিরুদ্ধে পরীক্ষা করেন নি; তারপরে ফাইলটির অনুপস্থিতি পুরোপুরি যৌক্তিক ফলাফল, এবং তাই ব্যতিক্রমী নয় ।