আমার একটি switchকাঠামো আছে যা পরিচালনা করতে বেশ কয়েকটি কেস রয়েছে। এটি switchপরিচালনা করে enumযা সংযুক্ত মানগুলির মাধ্যমে সদৃশ কোডের বিষয়টি তুলে ধরে :
// All possible combinations of One - Eight.
public enum ExampleEnum {
One,
Two, TwoOne,
Three, ThreeOne, ThreeTwo, ThreeOneTwo,
Four, FourOne, FourTwo, FourThree, FourOneTwo, FourOneThree,
FourTwoThree, FourOneTwoThree
// ETC.
}
বর্তমানে switchকাঠামো প্রতিটি মান পৃথকভাবে পরিচালনা করে:
// All possible combinations of One - Eight.
switch (enumValue) {
case One: DrawOne; break;
case Two: DrawTwo; break;
case TwoOne:
DrawOne;
DrawTwo;
break;
case Three: DrawThree; break;
...
}
আপনি সেখানে ধারণা পাবেন। ifপরিবর্তে একটি একক লাইনের সংমিশ্রণগুলি হ্যান্ডেল করার জন্য আমি বর্তমানে এটি একটি স্ট্যাক করা কাঠামোতে ভেঙে ফেলেছি :
// All possible combinations of One - Eight.
if (One || TwoOne || ThreeOne || ThreeOneTwo)
DrawOne;
if (Two || TwoOne || ThreeTwo || ThreeOneTwo)
DrawTwo;
if (Three || ThreeOne || ThreeTwo || ThreeOneTwo)
DrawThree;
এটি অবিশ্বাস্যরূপে দীর্ঘ যৌক্তিক মূল্যায়নের বিষয়টি তুলে ধরেছে যা পড়তে বিভ্রান্ত করছে এবং বজায় রাখা কঠিন। এটিকে রিফ্যাক্টর করার পরে আমি বিকল্পগুলির বিষয়ে চিন্তা করতে শুরু করি এবং কেসগুলির switchমধ্যে পতনের মধ্য দিয়ে একটি কাঠামোর ধারণা নিয়ে ভাবতে শুরু করি ।
আমাকে gotoসেই ক্ষেত্রে একটি ব্যবহার করতে হবে যেহেতু C#পতনের মাধ্যমে অনুমতি দেয় না। যাইহোক, এটি অবিশ্বাস্যরূপে দীর্ঘ লজিক চেইনগুলি প্রতিরোধ করে যদিও এটি switchকাঠামোর চারপাশে ঝাঁপিয়ে পড়ে , এবং এটি এখনও কোড নকল নিয়ে আসে।
switch (enumVal) {
case ThreeOneTwo: DrawThree; goto case TwoOne;
case ThreeTwo: DrawThree; goto case Two;
case ThreeOne: DrawThree; goto default;
case TwoOne: DrawTwo; goto default;
case Two: DrawTwo; break;
default: DrawOne; break;
}
এটি এখনও একটি পরিষ্কার যথেষ্ট সমাধান নয় এবং মূল শব্দটির সাথে একটি কলঙ্ক যুক্ত gotoযা আমি এড়াতে চাই। আমি নিশ্চিত যে এটি পরিষ্কার করার আরও ভাল উপায় থাকতে হবে।
আমার প্রশ্ন
পাঠযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা প্রভাবিত না করে এই সুনির্দিষ্ট কেসটি পরিচালনা করার জন্য আরও ভাল উপায় কি?
gotoআপনার ভাষাতে যখন উচ্চ স্তরের কাঠামো উপস্থিত না থাকে আপনি ব্যবহার করেন। আমি মাঝে মাঝে ইচ্ছা করতাম যে একটি ছিল fallthru; কীওয়ার্ড gotoতবে সেই বিশেষ ব্যবহার থেকে মুক্তি পেতে পারে তবে ওহ ভাল।
gotoসি # এর মতো উচ্চ-স্তরের ভাষায় কোনও ভাষা ব্যবহারের প্রয়োজন বোধ করেন তবে আপনি সম্ভবত অন্যান্য অনেক (এবং আরও ভাল) নকশা এবং / বা বাস্তবায়নের বিকল্পগুলি উপেক্ষা করেছেন। অত্যন্ত নিরুৎসাহিত।