2016-10-14 13 views
-1

私はこれを何かできますか、それとも悪い習慣ですか?Javascript - 関数の配列はこの悪い習慣です

file1.js

export func1(param) { 
if (valid(param)) return 'valid'; 
else return 'invalid' 
} 

export func2(param) { 
if (valid(param)) return 'valid'; 
else return 'invalid' 
} 

file2.js

import { func1, func2 } from 'file1' 

const list = [func1, func2] 

function test(value){ 
    list.forEach((listValue) => {console.log(listValue(value)); 
}); 
} 

私は私のプロジェクトでの入力の多くを持っていると私は彼らの検証用コードの量を縮小化しようとしている

現在の実装は次のようになります

file1.js

export validate(type, param){ 
switch(type){ 
    case TYPE1: 
    if (valid){ 
     return 'valid'; 
    } else { 
     return 'invalid'; 
    } 
    case TYPE2: 
    if (valid(param.rule)){ 
     return 'valid'; 
    } else { 
     return 'invalid'; 
    } 
    default: 
    break; 
} 

file2.js JavaScriptで

import validate from 'file1.js' 

const object = {value: '', types: [ 
    {type: TYPE1, rule: SOME_RULE} 
    {type: TYPE2, rule: SOME_OTHER_RULE} 
]} 

function validateObject(object) { 
    object.types.forEach((type) => 
    {console.log(validate(type.type, { 
      value: object.value, 
      rule: type.rule} 
    ));} 
} 
+1

すべての関数が同じ量のパラメータを持ち、その型が互換性があると仮定しても、特に問題はありません。 –

+0

私は初心者のようなので、私はこれを行うことができますかと思います。私はparamsが{value: ''、rule1: ''、rule2: '}のようにオブジェクトであると仮定しているので、 –

答えて

2

機能は、正確にはオブジェクトの特別な種類の第一級オブジェクトなので、関数の配列を持っているのに最適なプラクティスです。

0

個人的には悪い習慣だとは思わない。スープ作りについて考えてみましょう。

var steps = [ addWater, addPotatoes, addSalt, stirContents, cook ]; 
var pots = [ small_pot, medium_pot, large_pot ]; 

// if you use a method list here: 
for(pot in pots) 
    for(step in steps) 
     steps[step].call(this, pots[pot]); 

// if you don't use a method list: 
for(pot in pots) 
{ 
    addWater(pots[pot]); 
    addPotatoes(pots[pot]); 
    addSalt(pots[pot]); 
    stirContents(pots[pot]); 
    cook(pots[pot]); 
} 

各ステップごとに同じ入力がある場合は違いがありますか?両方のメソッドに別のステップを追加することができます。

関連する問題