1. ホーム
  2. ジャバスクリプト

[解決済み】switch文からreturn outするのはbreakを使うより良い方法と考えられるか?[クローズド]

2022-04-01 21:59:16

質問

オプション1 - リターンを使用した切り替え。

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

        default: return "";
    }    
}

オプション2 - breakを使った切り替え。

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 - returnを使用した切り替えが、よりクリーンでシンプルであるため、最も好きです。


以下は、@ic3b3rg さんのコメントにあるテクニックを使った私の具体的な例の jsFiddle です。 :

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);

ここで問題なのは、常に未定義を返してしまうことです。 これは、プロパティではなく、オブジェクト・リテラルの実際の値を渡しているからだと推測しています。 で説明されているテクニックを使ってこれを修正するにはどうしたらいいでしょうか? のコメントをご覧ください。

解決方法は?

ブレークを使用すると、関数内の処理を継続することができます。 関数の中でやりたいことがそれだけなら、スイッチから戻るだけでも問題ありません。