このコード:
var force = d3.layout.force()
.nodes(nodes)
.links([])
.size([w, h])
.start();
基本的に、C ++の場合と同じように読み取る必要があります(var
キーワードを除きます。C++では、の特定の型を宣言する必要がありますforce
)。C ++と同様に、空白は(ほとんど)重要ではありません。それぞれ.
がプロパティアクセスを示します。(C ++とは異なり、JavaScriptオブジェクトはフィールドとメソッドを区別しません。すべてがプロパティです。関数プロパティの場合は、名前の後に括弧を付けて呼び出すことができます。必要に応じて、括弧内に関数の引数を指定します。)ここにあります:
d3.layout
layout
-のプロパティにアクセスしますd3
。
.force()
force
-のプロパティである関数を呼び出しますd3.layout
。内部force
でd3.layout
は、キーワードとして使用できますthis
。
.nodes(nodes)
-の呼び出しnodes
によって返されたオブジェクトのプロパティである関数を呼び出しますforce()
(おそらくd3.layout
、おそらく何か他のもの)。
- 等
force
最後に、によって返される値に割り当てますstart()
。
2番目のコードについて:
force.on("tick", function(e) {
// Push different nodes in different directions for clustering.
var k = 6 * e.alpha;
nodes.forEach(function(o, i) {
o.y += i & 1 ? k : -k;
o.x += i & 2 ? k : -k;
});
ここに、の例(実際には2つ)がありanonymous function
ます。通常のJavaScriptの規則に基づいて、のon
関数force
はおそらくイベントハンドラー(この場合はイベント)を登録するために使用され"tick"
ます。イベントハンドラは無名関数です。
function(e) {
// Push different nodes in different directions for clustering.
var k = 6 * e.alpha;
nodes.forEach(function(o, i) {
o.y += i & 1 ? k : -k;
o.x += i & 2 ? k : -k;
}
説明のために、この関数を「外部」と呼びましょう。これは、tickイベントのプロパティを含むオブジェクトであると私が推測する引数を取ります。アウターの本体には、別の無名関数があります。それは。への引数nodes.forEach
です。この2番目の無名関数を「内部」と呼びましょう。ここでの関数は、ほとんどの場合、すべてのJavaScript配列のプロパティであるforEach
標準のイテレーター関数です。forEach
関数を引数として受け取り、配列のすべての要素で関数を順番に呼び出し、配列要素と要素インデックスを渡します。内部は実際にはクロージャの例です。関数本体k
は外部のローカル変数として定義されている変数を参照します。
JavaScriptは、いくつかの点でC ++と同じであり、いくつかの点で根本的に異なります。類似点がどこで終わり、相違点がどこから始まるかを知らない限り、C ++のバックグラウンドは、コーディング(およびコード読み取り)の取り組みを真剣に迷わせる可能性があります。紹介論文「JavaScriptの再紹介」を強くお勧めします。言語のすべての主要な機能をカバーしており、C++とJavaScriptがどのように類似しているかとどのように異なっているかを明確にするのに役立つはずです。