2016-09-01 5 views
1

私は自分の仕事で多くのエンティティを配列に作成する必要がありましたが、私のプルリクエストでthis library to use "pattern matching"を使って手動で配列を作成している人がいました。Javascriptでこのforループがパターンマッチングより悪いのはなぜですか?

私たちはたくさんのものを作り出す必要があります。彼は、パターンマッチングで行うように頼ま

function createStuff(createFunction, howManyTimes){ 
    var createdStuffs = []; 
    for(var i = 0; i < howManyTimes; i++){ 
    createdStuffs.push(createFunction(i)); 
    } 

    return createdStuffs; 
} 

何:

私は移入するため何をしたか
function createUser(id){ 
    return { 
    id: id 
    } 
} 

var users = createStuff(createUser, 50); 

:ユーザーの

function createStuff(createFunction, howManyTimes){ 
    return howManyTimes.matches(
    (x = 0) => [], 
    (x)  => [createFunction(x)].concat(createStuff(createFunction, x - 1)) 
) 
} 

このパターンマッチングについてのメリットは何ですか?私は、forループを置き換える彼の例の再帰呼び出しを理解していますが、すべての作成ロジックは基本的には一行に書かれていますが、私の例は読みやすいと思います。

私はこれに関する説明を求めています。ほとんどの人が「機能的で動きの少ない部品があるために優れています」と言っていますが、これは本当ですか?私は彼に同意しないと私は説明や、彼が間違って伝えるために、引数を希望

+0

あなたは(forループで)書いたコード:

すべての利点とunderscore.jsと目をつり上げの読みやすさの問題のどれを使用して、適切な機能液は次のようになります。パターンマッチングコードパターンマッチングの例は、(Haskellのような言語で)パターンマッチングに遭遇したり、独自にパターンを学習したりしない限り、ほとんどのjavascript開発者にとってもっと混乱するかもしれません。 –

+2

[可変変数のないES6でx回ループするメカニズムはありますか?](http://stackoverflow.com/q/30452263/1048572)を見てください。その "パターンマッチング"は非常に恐ろしい(暗いと本当に非効率的なマジックを使用して)。再帰と 'concat'を使いたい場合は、少なくとも単純なif文を使用してください。 – Bergi

+1

私は@bergiに同意します - そのライブラリで起こっているいくつかの本当に面倒なことがあります。 – naomik

答えて

1

あなたの同僚は、不変性と機能的なスタイルが有益であることはかなり正しい前提を取られ、非常に間違った結論を集めている任意の不変こと機能的なスタイルを採用したソリューションが優れています。どんなパラダイムにおいても、可読性は重要ですが可能です。ほぼ確実に速くより

var users = _.map(_.range(howManyTimes), createUser); 
関連する問題