3

私は JavaScript を勉強しています ( Professional Javascript for Web Developersを使用しています[1]) が、なぜ開発者が意味的に意味のある詳細な名前 (つまり、input または "$ `" の代わりに leftContext)?

短い名前を検索するのに (あるいは、コード補完を使って) 調べるのにかかる時間内に、詳細な名前を簡単に入力することができました。しかし、それらが重要である場合、それらを吹き飛ばしたくないので、なぜプログラマーは短い名前を好むのでしょうか?

ありがとうございました。

編集:

いくつかのコンテキスト。この本では、次の例が示されています。

var text = "this has been a short summer"; 
var pattern = /(.)hort/g; 

 if (pattern.test( text)){ 

   alert( RegExp.input);                     // this has been a short summer 
   alert( RegExp.$_);                        // this has been a short summer 

   alert( RegExp.leftContext);               // this has been a 
   alert( RegExp.["$`"]);                    // this has been a 

   alert( RegExp.rightContext);              // summer 
   alert( RegExp.["$'"]);                    // summer 

   alert( RegExp.lastMatch);                 // short 
   alert( RegExp.["$&"]);                    // short 

   alert( RegExp.lastParen);                 // s 
   alert( RegExp.["$+"]);                    // s 

  }

これらの冗長な形式でさえ廃止された場合、私の質問は少し異なると思います (「それらなしでこれらのタスクをどのように達成できますか?」)。

1: Zakas, Nicholas C. (2011-12-20). Web 開発者向けのプロフェッショナルな JavaScript。ジョン・ワイリー・アンド・サンズ.

4

3 に答える 3

0

他の言語 (Perl など) ではそうであると私が信じていたように、それらは以前のパターンを持っています。

などの置換文字列でのみ使用する必要があります"ABC".replace(/[ABC]/g, "$&")

于 2013-04-03T04:12:44.097 に答える
0

すでに「死んでいる」ようRegExp.["$`"]に見え、予期しない動作をします。RegExp.["$'"]RegExp.$+RegExp.$&

現在 (2015 年 4 月 30 日) の出力:

RegExp.input : これは短い夏でした
RegExp.$_ : これは短い夏でした
RegExp.leftContext : これは
RegExp.rightContext でした: 夏
RegExp.lastMatch : 短い
0
RegExp.lastParen : s
RegExp.$+ : undefinedNaN

ここにライブテストがあります:

var text = "this has been a short summer"; 
var pattern = /(.)hort/g; 



 if (pattern.exec(text) != null) {

   document.getElementById("res").innerHTML += "<b>RegExp.input</b>: " + RegExp.input + "<br />";               // this has been a short summer 
   document.getElementById("res").innerHTML += "<b>RegExp.$_</b>: " + RegExp.$_ + "<br />";                  // this has been a short summer 
   
   document.getElementById("res").innerHTML += "<b>RegExp.leftContext</b>: " + RegExp.leftContext + "<br />";       // this has been a 
   //document.getElementById("res").innerHTML += RegExp.["$`"] + "<br />";            // this has been a, now, does not let compile

   document.getElementById("res").innerHTML += "<b>RegExp.rightContext</b>: " + RegExp.rightContext + "<br />";    // summer 
   //document.getElementById("res").innerHTML += RegExp.["$'"] + "<br />";           // summer, now, does not let compile

   document.getElementById("res").innerHTML += "<b>RegExp.lastMatch</b>: " + RegExp.lastMatch + "<br />";           // short 
   document.getElementById("res").innerHTML += "<b>RegExp.$&</b>: " + RegExp.$& + "<br />";                  // was "short", now, evaluates the expression on the right to 0

   document.getElementById("res").innerHTML += "<br /><b>RegExp.lastParen</b>: " + RegExp.lastParen + "<br />";          // s 
   document.getElementById("res").innerHTML += "<b>RegExp.$+</b>: " + RegExp.$+ + "<br />";                 // was "s", now, outputs "NaN"

  }
<div id="res" />

于 2015-04-30T13:58:06.383 に答える
0

Perl Camel bookを言い換えると、 「クイック アンド ダーティ」を強調して開発時間を節約したい場合と、保守性を重視したい場合があります。仕事を終わらせるために簡単なハックが必要な場合は、調べずに覚えることができたものは、人間が読める自己文書化型の素敵なコードよりも高速です。別の格言を言い換えると、最初のプロトタイプは、基本的なフローが機能するようになったら戻って磨きをかけるつもりであり、「正しく機能させる」よりも「機能させる」必要があります。

(もちろん、この推論は戻ってきてあなたの後ろを噛む傾向がありますが、それでもこれは推論です。)

于 2013-04-03T04:19:02.463 に答える