ভাষাগুলি কেন স্যুইচ স্টেটমেন্টগুলিতে স্পষ্ট পতনের মাধ্যমে ব্যবহার করে না?


17

আমি পড়া ছিল কেন আমরা ব্যবহার করতে হবে breakswitch? , এবং এটি আমাকে অবাক করে দিয়েছিল যে কেন কিছু ভাষায় (যেমন পিএইচপি এবং জাভাস্ক্রিপ্ট) অন্তর্নিহিত পতনের অনুমতি দেওয়া হচ্ছে, যখন স্পষ্টভাবে পতনের জন্য কোনও সমর্থন (এএফএআইকি) নেই।

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

বর্তমানে সমর্থিত ফর্মটি হ'ল:

switch (s) {
    case 1:
        ...
        break;
    case 2:
        ... //ambiguous, was break forgotten?
    case 3:
        ...
        break;
    default:
        ...
        break;
}

যদিও এটি এটি লেখার জন্য অর্থবোধ করবে:

switch (s) {
    case 1:
        ...
        break;
    case 2:
        ...
        continue; //unambiguous, the author was explicit
    case 3:
        ...
        break;
    default:
        ...
        break;
}

এই প্রশ্নের উদ্দেশ্যগুলির জন্য পড়া-যাওয়াগুলি একটি ভাল কোডিং শৈলী কিনা তা এই বিষয়টি উপেক্ষা করতে দিন।

এমন কোন ভাষা আছে যা বিদ্যমান থাকার সুযোগ দেয় এবং এটিকে স্পষ্ট করে তোলে?

এমন কোনও reasonsতিহাসিক কারণ রয়েছে যা switchসুস্পষ্টের পরিবর্তে অন্তর্নিহিত পতনের অনুমতি দেয়?


4
সি # এর সাথে আপনার স্পষ্ট হওয়া আবশ্যক goto case, সুতরাং আপনার প্রশ্নের ভিত্তি কিছুটা ভুল।
পিডিআর

1
@ পিডিআর, আমি খুব স্পষ্টভাবে জিজ্ঞাসা করেছি যে এমন কোনও ভাষা আছে যা ইতিমধ্যে পতনের মাধ্যমে সমর্থন করে, আমি goto caseসি # তে অবগত নই ।
zzzzBov

হ্যাঁ, দুঃখিত, আমি মিস করেছি যে আপনার প্রশ্নের দুটি অংশ ছিল। দুর্ভাগ্যক্রমে, কথ্য হিসাবে এটি, আমি বন্ধ করতে ভোট দিচ্ছি কারণ এটি একটি জরিপ প্রশ্নের খুব কাছে। সঠিক উত্তর অনেক হবে।
pdr

সি # আপনাকে একাধিক লেবেল একই বিবৃতি তালিকা ভাগ করে নেওয়ার অনুমতি দেয়, যা কিছু পরিস্থিতি সরিয়ে দেয় যা পতনের মধ্য দিয়ে প্রয়োজন। goto caseবাকীগুলির জন্য , এটি পিডিআর হিসাবে উল্লেখ করেছে।
ব্রায়ান

উত্তর:


20

এটি প্রাথমিকভাবে historicalতিহাসিক, বেশিরভাগ ভাষা সি কী করেছে তা অনুলিপি করেছে।

সি যেভাবে এটি করেছে তার কারণ হ'ল সিটির নির্মাতারা স্যুইচ স্টেটমেন্টগুলিকে একটি জাম্প টেবিলের মধ্যে অনুকূলকরণ করা সহজ হতে চেয়েছিল intended এটি সি কারণের কারণে সুইচ স্টেটমেন্টগুলিকে অবিচ্ছেদ্য মানগুলিতে সীমাবদ্ধ করে।

একটি জাম্প টেবিলে, প্রোগ্রামটি অভিব্যক্তির ভিত্তিতে কোন অবস্থানে ঝাঁপিয়ে পড়বে তা গণনা করবে। প্রোগ্রামটি সেই বিন্দুতে লাফিয়ে যাবে এবং তারপরে সেই বিন্দু থেকে চালানো চালিয়ে যাবে। আপনি যদি বাকী টেবিলটি এড়িয়ে যেতে চান তবে আপনাকে টেবিলের শেষে একটি লাফ অন্তর্ভুক্ত করতে হবে। সি স্পষ্ট breakবক্তব্য ব্যবহার করে যাতে এই নির্মাণের সাথে সরাসরি চিঠিপত্র থাকে।


7
একটি সামান্য দ্রষ্টব্য হিসাবে, তাঁর "বিশেষজ্ঞ সি প্রোগ্রামিং" বইটিতে, পিটার ভ্যান ডের লিন্ডেন উল্লেখ করেছেন যে তিনি যখন তাদের সি সংকলনে সূর্যের জন্য কাজ করছিলেন, তখন প্রায় ~% the% স্যুইচ কেস breakথাকত এবং 3% এরও কম ছিল। । তারপরে তিনি এটিকে উদাহরণ হিসাবে ব্যবহার করেছিলেন যে ডিফল্ট ফল-থ্রু আচরণটি স্ব-স্বজ্ঞাত এবং এটি বিপরীত হওয়া থেকে ভাল হবে (স্পষ্টভাবে পতনের মাধ্যমে একটি কীওয়ার্ড ব্যবহার করুন)। ওহ, এবং বইটি সি এর অন্যান্য বৈচিত্রগুলিও ব্যাখ্যা করতে সত্যিই দুর্দান্ত, যার কয়েকটি সি ++ এবং এমনকি সি # এবং জাভাতেও পাওয়া যায়! এগুলি সবগুলি বি এবং বিসিপিএল-এ অন্তর্ভুক্ত। :)
zxcdw

3
এমন প্রোগ্রামিং ভাষা রয়েছে যেখানে সি # ( এমএসডিএন.মাইক্রোসফট.ফেন / লিবেরি / 06tc147t ( v=vs.71 ) .aspx ) স্পষ্ট হয় । অন্যদিকে, ব্রেকিং সি # তেও স্পষ্ট।
লিঙ্কেরো

@ জেএসসিডিডব্লু: খুব খারাপ কোনও উপায় নেই যে সামান্য পাখিটি সময় মতো ফিরে যেতে পারে এবং পরামর্শ দেয় যে caseপ্রথমটি ব্যতীত চিহ্নিত অন্য কোনও লেবেল স্বয়ংক্রিয়ভাবে উপস্থাপিত করা উচিত break, তবে চিহ্নিত চিহ্নযুক্ত +case(বা অন্য কোনও ডিজাইনার) এমনটি করা উচিত নয়। সংকলকটির পক্ষে কোডের অনেক লাইন অপসারণ করার সাথে সাথে বর্তমান ব্যবস্থার অর্থগত সুবিধাগুলি পরিচালনা এবং মঞ্জুরি দেওয়া সহজ হত।
সুপারক্যাট

7

গো fallthroughকীওয়ার্ডটি ব্যবহার করে সুস্পষ্ট পতনের জন্য অনুমতি দেয় (বিরতি অন্তর্ভুক্ত তবে স্পষ্টতই হতে পারে):

switch val {
case 1: // breaks
case 2:
    fallthrough
case 3:
    goto 
case 4, 5, 6: // equivalent to defining individual cases with explicit fallthough
    break // unnecessary
default:
}

এখানে কার্যকর যান এবং ভাষার বৈশিষ্ট থেকে প্রাসঙ্গিক বিট ।

আমি মনে করি না gotoআপনি কোনও নির্দিষ্ট ক্ষেত্রে যেতে ব্যবহার করতে পারবেন তবে আপনি মামলার অভ্যন্তরে একটি লেবেল তৈরি করতে পারেন এবং gotoসাধারণের মতো ব্যবহার করতে পারেন।

বোনাস হিসাবে, গো আপনাকে কেস স্টেটমেন্ট হিসাবে একটি স্যুইচে বাইনারি এক্সপ্রেশন, স্ট্রিং বা প্রকারগুলি ব্যবহার করতে দেয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.