【秘匿ES 6】シリーズコラム(5):残りのパラメータとデフォルトのパラメータ

3334 ワード

S 6は次世代JavaScript標準として、正式に先端開発者と面会します.ES 6の多くの新しい特性をより深く知るために、Mozilla Web開発者ブログは「ES 6 In Depth」シリーズの記事を発表しました.CSDNはすでに授権されて、このシリーズに対して引き続き翻訳を行い、「秘密を探るES 6」シリーズのコラムを組織して、みんなに参考にさせます.本稿はこのシリーズの第五編である.
ここでは、ES 6の残りのパラメータ(Reset parameters)とデフォルトのパラメータ(Defaults parameters)の使用について述べる.
残りのパラメータ(Reset parameters)
可変関数APIを作成する必要がある場合、関数は任意の数のパラメータの入力を実現する必要がある.例えば、String.prototype.co ncat方法は、任意の数の文字列パラメータ入力を受け入れることができる.ES 6では、残りのパラメータを用いて考え方を変えることができる.
以下は実例に関連して説明する.containsAllは、文字列が分子列に含まれているかどうかを検出する可変関数です.例えば、containsAll(「bana」、「b」、「nan」)はtrue、containsAll(「bana」、「c」、「nan」)はfalseに戻ります.
伝統的な書き方を採用したコードは以下の通りです.
function containsAll(haystack) {  
  for (var i = 1; i < arguments.length; i++) {  
    var needle = arguments[i];  
    if (haystack.indexOf(needle) === -1) {  
      return false;  
    }  
  }  
  return true;  
}
本方法の核心はパラメータオブジェクトを利用したものである.
を選択します.パラメータは行列式で関数に入力されます.それは完全に需要を満たすが、可読性が悪い.関数パラメータは唯一のhaystackなので、どのパラメータが含まれているのか一目で分かりにくいです.また、再帰演算を行う際には、初期位置のインデックス番号は0ではなく1であることに注意が必要です.最後に、haystackの前または後に他のパラメータを追加する必要があるなら、ループを更新しなければなりません.残りのパラメータを使うと、これらの問題は一つずつ解決できます.
残りのパラメータを使うコードは以下の通りです.
function containsAll(haystack, ...needles) {  
  for (var needle of needles) {  
    if (haystack.indexOf(needle) === -1) {  
      return false;  
    }  
  }  
  return true;  
}
この方法は伝統的な書き方と同じ機能を実現し、違いは特殊な文法…needlesを使用しています.containsAll(「bana」、「b」、「nan」)の演算過程はどうなりますか?まず、haystackを最初のパラメータbanaに充填します.needlesの前にあるシンボルは、needlesが残りのパラメータであることを示しています.以降の他のパラメータは配列に入れて変数needlesに割り当てられます.本例では[b],[na]です.その後の判定プロセスは通常通りに実行されます.(注:ここではfor-of循環文法を使用しています)
注意するには、最後のパラメータだけが残りのパラメータとしてマークされます.残りのパラメータの前にあるパラメータは、通常のパラメータの扱いと同じです.追加のパラメータはすべて1つの配列に入れられ、残りのパラメータに割り当てられます.追加のパラメータがない場合、残りのパラメータは空の配列となります.残りのパラメータはundefinedとして指定できません.
デフォルトパラメータ(Default parameters)
多くの場合、関数は着信パラメータを全て処理するとは限らないが、標準パラメータは着信パラメータの代わりに使用することもできる.JavaScriptは、これまでデフォルトのパラメータの処理がぎこちないです.値なしパラメータはundefinedとみなされます.ES 6には特別なデフォルトパラメータ処理方式が導入されています.
次の例を見てください.
function animalSentence(animals2="tigers", animals3="bears") {  
    return `Lions and ${animals2} and ${animals3}! Oh my!`;  
}
上記の関数の各パラメータに対して、=後の割当式の役割はパラメータのためのデフォルトの値です.したがって、
 animal Sentence()は「Lions and tigers and bears!Oh my!」に戻り、animal Sentence(「elephance」)は「Lions and elephans and bears!Oh my!」、anime Sentence(「elephance」、「whaless」)は「Lionephance!」に戻ります.
デフォルトのパラメータを使う場合、いくつか注意が必要ですか?
  • は、Pythonとは異なり、標準値式は、関数が起動されるときに求められます.つまり、デフォルトの表現は定義済みのパラメータ値を使用することができます.例えば上記の動物例の関数を特別な方法に変えます.
  • function animalSentenceFancy(animals2="tigers",  
        animals3=(animals2 == "bears") ? "sealions" : "bears")  
    {  
      return `Lions and ${animals2} and ${animals3}! Oh my!`;  
    }
  • 値undefinedの役割は、何も入っていないことに等しい.したがって、アニマルSentence(undefined、unicorns)が戻ってくるのは「Lions and tigers and unicorns!Oh my!」
  • です.
  • 明示的に定義されていないデフォルトパラメータはundefinedに等しいので、
  • function myFunc(a=42, b) {...}
    に等しい
    function myFunc(a=42, b=undefined) {...}
    結び目
    ES 6は残りのパラメータとデフォルトのパラメータに対して、JS関数の声明がより可読性と表現性を備えているので、試してみてください.(訳者:伍昆担当:陳秋歌)
    译文リンク:ES 6 In Depth:Restt parameters and defaults
    この翻訳文はCreative Commons Attribution Share-Alike License v 3.0に準拠しています.