জাভাস্ক্রিপ্টে, একটি স্যুইচ স্টেটমেন্ট থেকে ফিরে কি বিরতি ব্যবহারের চেয়ে ভাল অনুশীলন হিসাবে বিবেচনা করা হয়?


198

বিকল্প 1 - রিটার্ন ব্যবহার করে স্যুইচ করুন:

function myFunction(opt) 
{
    switch (opt) 
    {
        case 1: return "One";
        case 2: return "Two";
        case 3: return "Three";

        default: return "";
    }    
}

বিকল্প 2 - ব্রেক ব্যবহার করে স্যুইচ করুন:

function myFunction(opt) 
{
    var retVal = "";

    switch (opt) 
    {
        case 1: 
            retVal = "One";
            break;

        case 2: 
            retVal = "Two";
            break;

        case 3: 
            retVal = "Three";
            break;
    }

    return retVal;
}

আমি জানি যে উভয়ই কাজ করে তবে এটি আরও একটি সেরা অনুশীলন? আমি বিকল্প 1 পছন্দ করতে চাই - রিটার্ন সেরা ব্যবহার করে স্যুইচ করুন, কারণ এটি পরিষ্কার এবং সহজ।


@ আইসি 3 বি 3 আরজি'র মন্তব্যে উল্লিখিত কৌশলটি ব্যবহার করে এখানে আমার নির্দিষ্ট উদাহরণের একটি জেএসফিডাল রয়েছে :

var SFAIC = {};

SFAIC.common = 
{
    masterPages: 
    {
        cs: "CS_",
        cp: "CP_"
    },

    contentPages: 
    {
        cs: "CSContent_",
        cp: "CPContent_"    
    }
};

function getElementPrefix(page) 
{
    return (page in SFAIC.common.masterPages)
        ? SFAIC.common.masterPages[page]
        : (page in SFAIC.common.contentPages)
            ? SFAIC.common.contentPages[page]
            : undefined;
}

ফাংশনটি কল করার জন্য, আমি নিম্নলিখিত উপায়ে এটি করব:

getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);

এখানে সমস্যা হ'ল এটি সর্বদা অপরিবর্তিত ফেরত দেয়। আমি অনুমান করছি এটি কারণ কারণ এটি বস্তুর আক্ষরিক মূল্যতে চলেছে সম্পত্তি হিসাবে নয়। @ Ic3b3rg এর মন্তব্যে বর্ণিত কৌশলটি ব্যবহার করে আমি এটি ঠিক করতে কী করব ?


4
+1 ভাল প্রশ্ন। আমি নিজেই এটি ভাবলাম এবং আমি জানি যে এটি কেবল ফিরে আসার পক্ষে কাজ করে, আমি জানি না এটি সর্বোত্তম অনুশীলন কিনা। সম্প্রদায় কী চিন্তা করে তা দেখার জন্য আগ্রহী।
এলি

উত্তর:


266

একটি বিরতি আপনাকে ফাংশনে প্রক্রিয়া চালিয়ে যাওয়ার অনুমতি দেবে will আপনি যদি ফাংশনটিতে যা করতে চান কেবল তা স্যুইচ থেকে ফিরে আসা ঠিক।


6
সুতরাং, আমার প্রশ্নের উদাহরণ দেওয়া, উত্তর হ্যাঁ। তবে, আপনার যদি এমন কোনও ফাংশন থাকে যেখানে আপনাকে চালিয়ে যাওয়া দরকার, অবশ্যই আপনি যা ব্যবহার করবেন তা বিরতি।
কোড মাভেরিক

9
@ মার্ক কোস্টেলোর জবাব আমাকে আপনার প্রশ্ন সম্পর্কে আরও কিছুটা ধন্যবাদ জানাতে বাধ্য করেছে। আমি মনে করি আপনি একটি সাধারণ "সেরা অনুশীলন" গাইডলাইন সন্ধান করছেন, তবে আপনি যে নির্দিষ্ট উদাহরণটি দিয়েছেন তা সেরা অভ্যাস return {1:"One",2:"Two,3:"Three"}[opt];। আপনার যদি ডিফল্ট প্রয়োজন হয় তবে তা হবেvar o={1:"One",2:"Two,3:"Three"}; return opt in o?o[opt]:"";
ic3b3rg

@ আইসি 3 বি 3 আরজি - আমি আপনার কৌশলটি আপনার কৌশলটি কাজে লাগানোর চেষ্টা করে আমার প্রশ্নটি সম্পাদনা করেছি return (opt in o) ? o[opt] : "";তবে এটি সর্বদা আমার নির্দিষ্ট ক্ষেত্রে ডিফল্টটি ফিরিয়ে দেয়।
কোড ম্যাভেরিক

আমার কোডে টাইপো ছিলো (2nd অনুপস্থিত "মধ্যে "Two":) কিন্তু এটা আমার জন্য কাজ করে ... এখানে একটি সহজ পরীক্ষাvar o={1:"One",2:"Two",3:"Three"},opt=2; alert(opt in o?o[opt]:"");
ic3b3rg

আমি আপনার উদাহরণটি ব্যবহার করছিলাম না, কেবল কৌশলটি। আমার প্রশ্নটি দেখুন এবং আমি কী বলছি তা দেখতে আমার জেএসফিডেলের লিঙ্কটি ক্লিক করুন।
কোড মাভেরিক

9

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

যাইহোক, যদি দেওয়া হয় যে / অন্য বিবৃতিগুলির মধ্যে নিম্নলিখিতটি করা ভাল অনুশীলন হয়:

var foo = "bar";

if(foo == "bar") {
    return 0;
}
else {
    return 100;
}

এর উপর ভিত্তি করে, যুক্তিটি সেই বিকল্পটিকে তৈরি করা যেতে পারে যা সর্বোত্তম অনুশীলন।

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


2
উদাহরণস্বরূপ ভাল অভ্যাসreturn foo == "bar";
ic3b3rg

10
আমি ক্ষমা চাইছি যদি আমি আপনাকে বিরক্ত করি তবে সে ক্ষেত্রে আমি এখনও সহজ করে দেব: return foo == "bar" ? 0 : 100;বা এমনকি return [100,0][foo == "bar"];
ic3b3rg

4
@ ic3b3rg - করা উচিত নয়: return [100,0][+(foo == "bar")]; ?
কাতারে

3
@ কিউইউ আপনি ঠিক বলেছেন যে বুলিয়ানটি পূর্ণসংখ্যায় রূপান্তরিত হওয়া উচিত, তবে আমি এটি এইভাবে করব:return [100,0][foo == "bar" & 1];
ic3b3rg

7
@ আইসি 3 বি 3 আরজি এবং& কিউ - আপনি এই জাতীয় কৌশলগুলি ব্যবহার করে কারও এলিস কোডটি কীভাবে বজায় রাখতে চান? (এর মতো
স্টিফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.