বিষয়বস্তুতে চলুন

প্রোগ্রামিংয়ের মৌলিক ধারণা/ইনডিরেকশন অপারেটর

উইকিবই থেকে

সারসংক্ষেপ

[সম্পাদনা]

Case বা switch স্টেটমেন্ট একটি নির্বাচন নিয়ন্ত্রণ (selection control) প্রক্রিয়া, যার মাধ্যমে একটি নির্দিষ্ট ভেরিয়েবল বা এক্সপ্রেশনের মান অনুযায়ী প্রোগ্রামের নিয়ন্ত্রণ প্রবাহ (control flow) বিভিন্ন দিক বা শাখায় (multiway branch) চলে যেতে পারে। এটি প্রোগ্রামিংয়ে অনেকগুলো শর্ত যাচাই করার জন্য একটি কার্যকর পদ্ধতি।[]

আলোচনা

[সম্পাদনা]

দ্বি-মুখী (two-way) নির্বাচন পদ্ধতির একটি সীমাবদ্ধতা/অসুবিধা হলো, এতে আমরা কেবল দুটি বিকল্প বিবেচনা করতে পারি। কিন্তু যদি আপনার সামনে দুটির বেশি বিকল্প থাকে তখন কী করবেন? নিচের বিবেচনা করুন যেখানে চারটি বিকল্প রয়েছে:

   যদি বয়স ১৮ হয়  
       তবে আপনি ভোট দিতে পারবেন
   অথবা যদি বয়স ৩৯ হয়  
       তবে আপনি মধ্য বয়সী  
   অথবা যদি বয়স ৬৫ হয়  
       তবে অবসর গ্রহণের কথা ভাবুন  
   অন্যথায়
       বয়সটি গুরুত্বপূর্ণ নয় 

এখানে বয়সের মান অনুযায়ী আপনি একটি উপযুক্ত বার্তা পাবেন। শেষ অংশটিকে ডিফল্ট হিসাবে বিবেচনা করা হয়। যদি বয়স ১৮, ৩৯ বা ৬৫ না হয়, তাহলে আপনি ডিফল্ট বার্তাটি পাবেন। তবে কিছু ক্ষেত্রে ডিফল্ট কোনো কাজ থাকে না। নিচের ফ্লোচার্ট উদাহরণটি সে রকম একটি পরিস্থিতি বোঝায়:

এই ফ্লোচার্টটি একটি কেস কন্ট্রোল স্ট্রাকচারের (case control structure) উদাহরণ এবং এটি একাধিক বিকল্প নির্বাচন (multiway selection) করার জন্য ব্যবহৃত হয়। ফ্লোচার্টের সিদ্ধান্ত বাক্সে (decision box) থাকে একটি ভেরিয়েবল — এখানে সেটি হলো age। কেস স্ট্রাকচারের লজিকটি মূলত সমতা যাচাইয়ের (equality check) উপর ভিত্তি করে তৈরি, যেখানে age ভেরিয়েবলের মানকে তালিকাভুক্ত মানগুলোর সঙ্গে বাম দিক থেকে ডান দিকে একে একে তুলনা করা হয়। প্রথমে age == 18 কিনা তা যাচাই করা হয়। যদি এটি সত্য হয়, তাহলে লজিক নিচের অ্যাকশন অংশ দিয়ে প্রবাহিত হয়ে সরাসরি কেস স্ট্রাকচারের নিচ দিয়ে বেরিয়ে যায়। যদি এই শর্তটি মিথ্যা হয়, তাহলে পরবর্তী ডানপাশের মানের সঙ্গে পুনরায় তুলনা করা হয়। এই কাঠামোটি আসলে nested if-then-else স্ট্রাকচারের মতোই কাজ করে।

একাধিক বিকল্প নির্বাচনের (Multiway Selection) কোড

[সম্পাদনা]

Python does not support a case control structure. But using the same example as above, here is C++ / C# / Java / JavaScript / Swift code to accomplish the case control structure. Python ভাষায় case control structure সমর্থন করে না। তবে উপরের একই উদাহরণ ব্যবহার করে, নিচে C++ / C# / Java / JavaScript / Swift ভাষায় case control structure প্রয়োগ করে কোড দেওয়া হলো।

   switch (age)
   {
       case 18:
           message = "আপনি ভোট দিতে পারেন।";
           break;
       case 39:
           message = "আপনি মধ্য বয়সী।";
           break;
       case 65:
           message = "অবসর গ্রহণের কথা ভাবুন।";
           break;
       default:
           message = "বয়সটি গুরুত্বপূর্ণ নয়।";
           break;
   }

ভেরিয়েবল age-এর মান প্রথম case অর্থাৎ ১৮ (যাকে তালিকাভুক্ত মানও বলা হয়) এর সঙ্গে সমতা যাচাই করে তুলনা করা হয় — অর্থাৎ "age সমান ১৮ কিনা"। যদি শর্তটি সত্য হয়, তাহলে message-এর মান হিসেবে "আপনি ভোট দিতে পারেন।" নির্ধারণ করা হয় এবং পরবর্তী লাইন (break) কার্যকর হয়, যা কন্ট্রোল স্ট্রাকচারের শেষে চলে যায়। যদি শর্তটি মিথ্যা হয়, তাহলে এটি পরবর্তী case-এ চলে গিয়ে পুনরায় তুলনা করে।

অনেক প্রোগ্রামিং ভাষায় কেস কন্ট্রোল স্ট্রাকচারের জন্য তালিকাভুক্ত মানগুলো অবশ্যই পূর্ণসংখ্যা (integer) পরিবারের ডেটা টাইপ হতে হয়। এর অর্থ সাধারণত এটি হতে পারে একটি পূর্ণসংখ্যা (integer) বা অক্ষর (character) ডেটা টাইপ। নিচের উদাহরণে অক্ষর (character) ডেটা টাইপ ব্যবহার করা হয়েছে (choice একটি অক্ষর ভেরিয়েবল):

    switch (choice)
   {
       case 'A':
           message = "আপনি A গ্রেডের ছাত্র।";
           break;
       case 'B':
           message = "আপনি B গ্রেডের ছাত্র।";
           break;
       case 'C':
           message = "আপনি C গ্রেডের ছাত্র।";
           break;
       default:
           message = "হয়তো আপনাকে আরও কঠোর পরিশ্রম করা উচিত।";
           break;
   }

কেস কন্ট্রোল স্ট্রাকচারের সীমাবদ্ধতা

[সম্পাদনা]

অধিকাংশ প্রোগ্রামিং ভাষা কেস-ধরনের স্ট্রাকচারে মানের পরিসীমা (ranges) গ্রহণ করে না। নিচের ফ্লোচার্ট উদাহরণে পরিসীমা ব্যবহার করা হয়েছে:

একই লজিকের জন্য নিম্নোক্ত ছদ্মকোড (pseudocode) বিবেচনা করুন:

Case of age
  0 to 17    Display "আপনি ভোট দিতে পারবেন না।"
  18 to 64   Display "আপনি কর্মক্ষম বয়সে আছেন।"
  65 +       Display "আপনাকে অবসর নেওয়া উচিত।"
End

কেস কন্ট্রোল স্ট্রাকচার ব্যবহার করে নন-ইন্টিজার ডেটা টাইপ বা মানের পরিসীমা (ranges) গ্রহণ করা সম্ভব যখন প্রোগ্রামের ডিজাইন করা হয় এবং সেই ডিজাইন পসুডোকোড ( pseudocode ) বা ফ্লোচার্টের মাধ্যমে ডকুমেন্ট করা হয়। তবে অধিকাংশ প্রোগ্রামিং ভাষায় এর বাস্তবায়ন সাধারণত জটিল বুলিয়ান এক্সপ্রেশনসহ nested if then else পদ্ধতি অনুসরণ করে।

উপরের উদাহরণের লজিক দেখতে এ রকম হবে:

if age > 0 and age <= 17
    display "আপনি ভোট দিতে পারবেন না।"
else if age >= 18 and age <= 64
    display "আপনি কর্মক্ষম বয়সে আছেন।"
else
    display "আপনাকে অবসর নেওয়া উচিত।"

ভালো স্ট্রাকচার্ড প্রোগ্রামিং পদ্ধতি

[সম্পাদনা]

অধিকাংশ পাঠ্যপুস্তকের লেখকরা নিশ্চিত করেন যে ভালো স্ট্রাকচার্ড প্রোগ্রামিং কৌশল ও অভ্যাস ভাষার প্রযুক্তিগত সম্ভাবনা এবং ক্ষমতার চেয়ে অনেক বেশি গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি প্রোগ্রামিং দক্ষতা অর্জন করতে শিখছেন। মনে রাখবেন, এই মডিউলটি প্রোগ্রামিংয়ের মূল ধারণা ও মূলনীতি শেখার ওপর কেন্দ্রীভূত, যাতে আমাদের প্রাথমিক প্রোগ্রামিং দক্ষতা গড়ে উঠতে পারে। এটি কোনো নির্দিষ্ট প্রোগ্রামিং ভাষার বিস্তারিত আলোচনা করার উদ্দেশ্যে তৈরি হয়নি, যদিও কখনো কখনো ভাষার যান্ত্রিক বিষয়গুলি আলোচনা করতে হয়।

মূল শব্দসমূহ

[সম্পাদনা]
কেস (case)
একটি কন্ট্রোল স্ট্রাকচার যা মাল্টিওয়ে সিলেকশন (multiway selection) করে।
সুইচ (switch)
একটি কন্ট্রোল স্ট্রাকচার যা কেস কন্ট্রোল স্ট্রাকচারের মতো কাজ করতে পারে।

রেফারেন্সসমূহ

[সম্পাদনা]