স্যুইচ ডিফল্ট ক্ষেত্রে ভাঙ্গা


88

আমি breakপ্রায়শই শেষ মামলার পরে অন্তর্ভুক্ত করার জন্য বা না থাকায় কিছুটা বিস্মিত হই default

switch (type) {
    case 'product':

        // Do behavior

        break;
    default:

        // Do default behavior

        break; // Is it considered to be needed?
}

breakকোডটি বাকী- switchকেসেসের মধ্যে দিয়ে চালানো থেকে বিরত রাখা আমার একমাত্র উদ্দেশ্য understanding

তাহলে কি breakধারাবাহিকতার কারণে শেষ অবধি যুক্তিযুক্ত হওয়া বা যা breakপ্রয়োগমূলক কোনও প্রয়োগ না করার কারণে এটি রাখা এড়িয়ে যাওয়া আরও যুক্তিযুক্ত বলে বিবেচিত হয় ? উভয়ই আমার মতে বিভিন্ন উপায়ে যৌক্তিক।

এটি কোনও নির্দিষ্ট ডিগ্রির সাথে একটি .phpফাইল শেষ করার সাথে তুলনা করা যেতে পারে ?>?>ফাঁকা জায়গা আউটপুট দেওয়ার ঝুঁকির কারণে আমি কখনই শেষ করি না , তবে কেউ যুক্তি দিতে পারে যে ফাইলটি শেষ করা এটি যৌক্তিক জিনিস thing

উত্তর:


144

breakশেষ বিকল্পের পরে প্রযুক্তিগতভাবে প্রয়োজন হয় না (যা আপনাকে মনে রাখবেন, defaultএটি হওয়ার দরকার নেই : এটি পুরোপুরি আইনী, এবং defaultশাখাটিকে প্রথমে রাখার জন্য এমনকি কখনও কখনও দরকারী ); আপনার কোডটি switchবিবৃতিটির শেষের মধ্য দিয়ে আসে বা breaksতার শেষ শাখার শেষের দিকে একই ফলাফল রয়েছে।

যাইহোক, আমি এখনও তিনটি কারণে একটি returnবা breakবিবৃতি দিয়ে সর্বশেষ শাখা সহ প্রতিটি শাখা শেষ করেছিলাম :

  1. Refactorability। যদি আপনার সমস্ত শাখা breakবা এর সাথে শেষ হয় তবে returnআপনি অর্থ পরিবর্তন না করে এগুলি পুনরায় অর্ডার করতে পারেন। এই জাতীয় পুনঃক্রমের জন্য কোনও রিগ্রেশন প্রবর্তন করা কম সম্ভাবনা তৈরি করে।
  2. ধারাবাহিকতা এবং সবচেয়ে কম আশ্চর্য। ধারাবাহিকতা বলছে আপনার শাখাগুলি ধারাবাহিকভাবে শেষ হওয়া উচিত, যদি না সেগুলি প্রকৃত অর্থে পৃথক হয়। ন্যূনতম আশ্চর্যের মূল নীতিটি আদেশ করে যে অনুরূপ জিনিসগুলি একই রকম দেখতে হবে। switchপূর্ববর্তীগুলির মতো ঠিক একটি ব্লকের শেষ শাখা সমাপ্তি উভয়কেই পরিপূর্ণ করে, যা সহজ পাঠ এবং বোঝার জন্য তোলে। যদি আপনি স্পষ্টভাবে ছেড়ে যান তবে breakশেষ শাখাটি অপটিকভাবে পৃথক হবে (যা দ্রুত স্ক্যান করার জন্য বিশেষভাবে গুরুত্বপূর্ণ) এবং এটি সত্যিই আলাদা নয় তা দেখার জন্য পাঠককে পৃথক বিবৃতি পড়ার নাকাল-মেজাজী স্তরে নামতে হবে ।
  3. নিজেকে রক্ষা করা। আপনি যদি আপনার সমস্ত switchশাখা একটি দিয়ে শেষ করার অভ্যাস তৈরি করেন তবে breakএটি কিছুক্ষণ পরে স্বয়ংক্রিয় হয়ে উঠবে এবং আপনি যেখানে দুর্ভাগ্যবশত এটি গুরুত্বপূর্ণ তা ভুলে যাবেন এমন সম্ভাবনা কম। breakপ্রতিটি শাখার শেষে আশা করার জন্য নিজেকে প্রশিক্ষণ দেওয়াও হারিয়ে যাওয়া breakবিবৃতি সনাক্ত করতে সহায়তা করে , যা ডিবাগিং এবং সমস্যা সমাধানের জন্য দুর্দান্ত।

এই আপনার অন্তর্দৃষ্টি জন্য ধন্যবাদ! breakশেষ
কেসটি

7
সি #, ইন break(অথবা অন্যান্য কন্ট্রোল- প্রবাহ বিবৃতি যে প্রস্থান করে case) হয় টেকনিক্যালি গত বিকল্প পর প্রয়োজন ছিল।
dan04

3
@ ডান04: হ্যাঁ, ভাল কথা। সি # এখানে একটি ব্যতিক্রম, এবং এটি সম্ভবত কারণ ভাষা ডিজাইনারগণ switchবিদ্যমান ভাষাগুলিতে পড়ার সমস্যাগুলি সম্পর্কে জানতেন এবং তাদের প্রতিরোধ করতে চেয়েছিলেন। সি # বিধিগুলি আমার উত্তর থেকে দেওয়া সুপারিশগুলির সাথে মেলে বেশিরভাগ ক্ষেত্রে।
টিডামার্স

আপনি কোন ভাষায় বিশেষভাবে কথা বলছেন? সি? সি ++? সি শার্প? জাভা? পিএইচপি?
সুইভ

2
একটি ভাল সংকলক পরবর্তী নির্দেশের breakপরিবর্তে কোনও উত্স-না হিসাবে ফাইনালটিকে চূড়ান্তভাবে বিবেচনা করবে, তাই না jmp?
নাথান ওসমান

11

switch-caseবেশিরভাগ ভাষায় ব্যবহারের আশেপাশে যে অস্পষ্টতা বিদ্যমান তা প্রদত্ত , এটি ব্যবহার করার সময় আমি সর্বদা একটি breakবিবৃতি ব্যবহার করার পরামর্শ দেব , যখন এটি স্পষ্টভাবে এবং নকশাকৃতভাবে না চেয়ে থাকে

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


7
আমি যখন একটি মামলা পরের দিকে পড়তে চাই (এবং এটি অবক্ষয়জনিত কেস নয় case foo: case bar: ...) আমি একটি স্পষ্ট মন্তব্য রেখেছিলাম যে আমি চাই যে পতন-ঘটনাই ঘটুক। এটি আরও পরিষ্কার করে তোলে।
ডোনাল ফেলো

3
হ্যাঁ // no breakএর জায়গায় একটি সাধারণ মন্তব্যের মতbreak;
পেসারিয়ার

অথবা [[fallthrough]]সি ++ এর ক্ষেত্রে কোনও বৈশিষ্ট্য।
রুসলান

1

শেষ মামলার breakপরে কোনও প্রয়োজন নেই । আমি " সর্বশেষ " শব্দটি ব্যবহার করি ( ডিফল্ট নয় ) কারণ এটি প্রয়োজনীয় নয় ডিফল্ট কেসটি সর্বশেষ কেস।

switch(x)
{
case 1:
//do stuff
break;

default:
//do default work
break;

case 3:
//do stuff

}

এবং আমরা জানি, একটি break দুটি টানা দুটি মধ্যে প্রয়োজনীয় case। কখনও কখনও, if(a!=0)অন্যরা আমার কোড উল্লেখ করে আমি আরও পঠনযোগ্যতার জন্য আমার কোডটিতে ব্যবহার করি। আমি ব্যবহার করতে বেছে নিতে পারেন if(a), এটি আমার পছন্দ বিষয়


5
আমার জন্য এটি "সর্বদা বিরতি ব্যবহার করুন" এর অর্থ হবে, কেবলমাত্র যদি কিছু প্রোগ্রামার caseআপনার শেষে একটি নতুন যুক্ত করে থাকে তবে switchএটি breakউপস্থিত রয়েছে কিনা তা পরীক্ষা না করেই (এটি সেই প্রোগ্রামারের ত্রুটি হতে পারে তবে কোনও কারণে নিরাপদ থাকলেও, কারণ আপনি 6 মাসের মধ্যে সেই প্রোগ্রামার হতে
পারেন-

@ এসজুয়ান 7676 হ্যাঁ, আমি একমত, দু: খের চেয়ে আরও নিরাপদ, যদি আপনি ভবিষ্যতের ত্রুটিগুলির জন্য কোনও সুরক্ষিত রাখতে চান তবে আপনাকে অবশ্যই শেষে অবশ্যই এটি অন্তর্ভুক্ত করতে হবে।
সুবর্ণা পাতায়িল

1
সেই যুক্তিটি মাথায় রেখে, আপনি , কোনও নতুন মান সন্নিবেশ করানোর ক্ষেত্রে অ্যারেগুলির শেষে সর্বদা থাকতে পারে বলে তর্ক করতে পারেন । তবে এটি কিছু কোডগুলি ভেঙে দেয় এবং সাধারণত কুশ্রী লাগে :)
রবিন ক্যাসলিন

1
@ রবিন একটি কমাতে রেখে দেওয়া আলাদা। যদি এটি না থাকে এবং কেউ অ্যারেতে একটি নতুন মান যুক্ত করে তবে তারা একটি সংকলন ত্রুটি পাবে। তবে পূর্ববর্তী কেস স্টেটমেন্টটিতে বিরতি না থাকলে কোনও সংকলন ত্রুটি থাকবে না - সুতরাং এটি মিস করা এবং রানটাইম ত্রুটির কারণ হতে পারে।
কিথ মিলার

@ রবিনকাস্টলিন প্রদত্ত ভাষা আপনাকে একটি লিখতে দেয় ,। ইনসেস, defaultসর্বশেষ কেস হিসাবে ডিজাইন করা হয়েছিল। সম্ভবত ভাষা তার breakপরে একটি ত্রুটি হিসাবে বিবেচনা করবে । ধরে breakনেওয়া দু'টি ক্ষেত্রেই কেবল ডিফরেনেটর হিসাবে অনুমোদিত ছিল।
সুবর্ণা পাতায়িল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.