আমার একটি 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
সি # এর মতো উচ্চ-স্তরের ভাষায় কোনও ভাষা ব্যবহারের প্রয়োজন বোধ করেন তবে আপনি সম্ভবত অন্যান্য অনেক (এবং আরও ভাল) নকশা এবং / বা বাস্তবায়নের বিকল্পগুলি উপেক্ষা করেছেন। অত্যন্ত নিরুৎসাহিত।