2016-06-01 10 views
2

私はconstを好きで、私はswitchが好きです。このIIFEスイッチステートメントは不必要なオーバーヘッドを引き起こしますか?

注:以下は単なる例です。それぞれの場合のコードはやや複雑で、返されるオブジェクトはJSXコンポーネントです。

はこの考えてみましょう:

let retval // can't declare as const! 
switch (value) { 
    case 'a': 
    retval = 'aa' 
    break 
    case 'b': 
    retval = 'bb' 
    break 
    case 'c': 
    retval = 'cc' 
    break 
    case 'd': 
    retval = 'dd' 
    break 
    default: 
    retval = 'xx' 
} 

// mistakenly by purpose change retval here.. 
retval = function nope(){ return null } 

を私ははこれに比べ、私のconstsを使用しますか

const retval = (() => { 
    switch (value) { 
    case 'a': 
     return 'aa' 
    case 'b': 
     return 'bb' 
    case 'c': 
     return 'cc' 
    case 'd': 
     return 'dd' 
    default: 
     return 'xe' 
    } 
})() 

retval = null // nope you are safe here!, raises error 

は、それが不要なオーバーヘッドを引き起こしていますか? ...またはエンジンはそれを利用するのだろうか?

答えて

2

switch文ではなく、デフォルト値のオブジェクトを使用できます。

const retval = {a: 'aa', b: 'bb', c: 'cc', d: 'dd'}[value] || 'xe'; 

またはちょうど終わりにとにかく

var value = 'd'; 
 
const retval = ({a:() => 'aa', b:() => 'bb', c:() => 'cc'}[value] || (() => 'xe'))(); 
 
console.log(retval);

+0

実行される機能と、これはニート溶液である - 特定の場合です。しかし、これはすべてが処理され、メモリに格納されることを意味します。私はいくつかの複雑なJSXコンポーネントを構築し、それらを戻しています。私は、すべてのコンポーネントを構築する必要はありません、ちょうど正しいものです。このアプローチを使用すると、それらをすべて最初に構築するでしょうか? – Qwerty

+1

は内容によって異なります。 ifが関数ならば、必要なものだけを実行することができます。 –

+0

私は実際にそのような場合に関数を使用しているので、このアプローチは本当にクールです!私はそれに+1を与えることができるようにあなたの答えにメモを追加してください。とにかく、このアプローチと通常の「スイッチ」の違い、特に処理速度、有効性、およびリソースの点を含めて、私の2つの質問には一言も言いたいと思います。 – Qwerty

関連する問題