> For the complete documentation index, see [llms.txt](https://primer2.dynamobim.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://primer2.dynamobim.org/ja/5_essential_nodes_and_concepts/5-3_the-building-blocks-of-programs/1-data.md).

# データ

データは、各種プログラムの構成要素です。データはワイヤ経由でやり取りされ、そのデータを処理するノードに入力情報を提供します。処理されたデータは、新しい形式の出力データになります。ここでは、データの定義と構造について確認し、Dynamo で実際にデータを使用してみます。

## データの概要

データとは、定性的な変数や定量的な変数の集まりのことです。最も単純な形式のデータは、`0`、`3.14`、`17` などの数値です。この他にも、変化する数値を表す変数(`height`)、文字(`myName`)、ジオメトリ(`Circle`)、データ項目のリスト(`1,2,3,5,8,13,...`)など、さまざまな種類のデータがあります。

Dynamo のノードの入力ポートには、データを追加または送信する必要があります。アクションが設定されていないデータを使用することはできますが、ノードが表すアクションを処理する場合はデータが必要になります。ノードをワークスペースに追加する際に、そのノードに対して入力データを指定しなかった場合、結果として関数が返されます。アクション自体の結果は返されません。

\![データとアクション](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-jpn/.gitbook/assets/data%20-%20what%20is%20data.jpg)

> 1. 単純なデータ
> 2. データとアクション(ノード)が正常に実行される
> 3. 入力データが指定されていないアクション(ノード)から一般的な関数が返される

### Null - データが存在しない

Null に注意しましょう。`'null'` タイプはデータが存在しないことを表します。これは抽象的な概念ですが、ビジュアル プログラミングを使用しているとよく登場します。たとえば、アクションを実行して正しい結果が生成されなかった場合に、ノードから NULL が返されます。

安定したプログラムを作成するには、NULL をテストし、データ構造から NULL を削除することが重要になります。

| アイコン | 名前/構文         | 入力  | 出力   |
| ---- | ------------- | --- | ---- |
| !    | Object.IsNull | obj | bool |

### データ構造

ビジュアル プログラミングを行うと、大量のデータを非常に短時間で生成できるため、データ階層を管理するための手段が必要になります。これを行うには、データ構造を使用します。データ構造とは、データを格納するための構造化されたスキームのことです。データ構造の仕様と使用方法は、プログラミング言語によって異なります。

Dynamo の場合、リストを使用してデータに階層を追加します。これについては、これ以降の章で詳しく説明します。ここでは、簡単な操作から始めてみましょう。

リストは、1 つのデータ構造内に配置された項目の集合を表します。リストと項目の関係は次のようになります。

* 私の手(*リスト*)には 5 本の指(*項目*)がある。
* 私の家の前の通り(*リスト*)には 10 軒の家(*項目*)が建っている。

\![リストの内訳](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-jpn/.gitbook/assets/data%20-%20data%20structures.jpg)

> 1. **Number Sequence** ノードは、*start* 入力、*amount* 入力、*step* 入力を使用して数値のリストを定義します。上の図の 2 つのノードを使用して、10 個の数値を格納する 2 つのリストを作成しました。一方のリストには *100 から 109* までの数値が格納され、もう一方のリストには *0 から 9* までの数値が格納されています。
> 2. **List.GetItemAtIndex** ノードは、特定のインデックスを使用して、リスト内の特定の項目を選択します。*0* を選択すると、リスト内の最初の項目(この場合は *100*)が取得されます。
> 3. もう一方のリストでも同じ手順を実行すると、リスト内の最初の項目である *0* が取得されます。
> 4. 次に、**List.Create** ノードを使用して、2 つのリストをマージして 1 つのリストを作成します。このノードによって「*リストのリスト*」が作成されることに注意してください。これにより、データの構造が変化します。
> 5. インデックスを *0* に設定してもう一度 **List.GetItemAtIndex** ノードを使用すると、「リストのリスト」内の最初の項目が取得されます。この場合、リストが項目として処理されます。この動作は、他のスクリプト言語とは多少異なっています。リストの操作とデータ構造については、これ以降の章でさらに詳しく説明します。

Dynamo のデータ階層を理解するには、「**データ構造については、リストが項目として認識される**」という概念を理解する必要があります。つまり、Dynamo は、トップダウン プロセスを使用してデータ構造を認識するということです。これは何を意味するのでしょうか。例を使用して詳しく説明します。

## 演習: データを使用して円柱の配列を作成する

> 下のリンクをクリックして、サンプル ファイルをダウンロードします。
>
> すべてのサンプル ファイルの一覧については、付録を参照してください。

{% file src="/files/VhSBBDt2Yp2WTpAebjDr" %}

この最初の例では、ジオメトリ階層全体にわたるシェル化された円柱を作成します。ジオメトリ階層については、このセクションで説明します。

### パート I: いくつかの変更可能なパラメータを持つ 1 つの円柱に対してグラフを設定する

1.**Point.ByCoordinates を追加する -** このノードをキャンバスに追加すると、Dynamo プレビュー グリッドの基準点に点が表示されます。*x,y* 入力と *z* 入力の既定値は *0.0* です。この場合、Dynamo プレビュー グリッドの基準点に点が表示されます。

!

2.**Plane.ByOriginNormal -** ジオメトリ階層内の次の段階は、平面です。平面を作成する方法はいくつかありますが、ここでは、基準点と法線を入力して作成します。ここで使用する基準点は、前の手順で作成した点ノードです。

**Vector.ZAxis -** このノードは、Z 方向の単位ベクトルです。このノードには入力はなく、\[0,0,1]という値のベクトルしかないことに注意してください。このノードは、**Plane.ByOriginNormal** ノードの *normal* の入力として使用します。これにより、Dynamo のプレビューに長方形の平面が表示されます。

!

3.**Circle.ByPlaneRadius -** 次に、前の手順で作成した平面から曲線を作成して階層を拡張します。このノードに接続すると、基準点に円が表示されます。このノードの半径の既定値は *1* です。

!

4.**Curve.Extrude -** このノードに深さを設定することにより、基準点に表示されている円を立体的な 3 次元の円柱にします。このノードは、曲線を押し出してサーフェスを作成します。このノードの距離の既定値は *1* です。この場合、ビューポートに円柱が表示されます。

!

5.**Surface.Thicken -** このノードは、指定の距離でサーフェスをオフセットして形状を閉じることにより、閉じたソリッドを作成します。厚さの既定値は *1* です。この場合、その値に従って、シェル化された円柱がビューポートに表示されます。

!

6.**Number Slider -** ここでは、すべての入力に対して既定値を使用するのではなく、パラメータ制御をモデルに追加してみましょう。

**範囲編集用キャレット -** 数値スライダをキャンバスに追加したら、左上のキャレットをクリックして範囲オプションを表示します。

**Min/Max/Step -** *Min*、*Max*、*Step* の値を、それぞれ *0*、*2*、*0.01* に変更します。これにより、ジオメトリ全体のサイズをコントロールします。

!

7.**Number Slider -** すべての既定の入力で、この数値スライダのコピー アンド ペースト操作を繰り返します(Number Slider ノードを選択して\[Ctrl]+\[C]を押し、次に\[Ctrl]+\[V]を押す)。この操作は、既定値が設定されているすべての入力に Number Slider ノードが接続されるまで繰り返します。定義を有効にするには、一部のスライダ値をゼロより大きな値に設定する必要があります。たとえば、サーフェスに厚みを付ける場合は、押し出しの深さをゼロより大きな値に指定する必要があります。

!

!

8.これで、数値スライダを使用したパラメータ制御のシェル化された円柱が作成されました。いくつかのパラメータの値を変更して、Dynamo のビューポート内でジオメトリが動的に更新されることを確認してください。

!

**Number Slider -** これまでの手順で、多くのスライダをキャンバスに追加してきました。そのため、作成したツールのインタフェースをクリーンアップする必要があります。各スライダを右クリックして\[名前変更]を選択し、そのスライダのパラメータ(厚さ、半径、高さなど)に適した名前に変更します。

!

### パート II: パート I の円柱の配列を入力する

9.ここまでの手順で、厚みのある円柱が作成されました。この時点では、この円柱はまだ 1 つのオブジェクトにすぎません。ここからは、動的にリンクされた円柱の配列を作成していきます。そのためには、項目を 1 つずつ操作するのではなく、円柱のリストを作成します。

**追加用ノード (+) -** ここでの目的は、前の手順で作成した円柱の横に、一連の円柱を追加することです。現在の円柱の横に別の円柱を追加するには、円柱の半径とシェルの厚さの両方を考慮する必要があります。ここでは、2 つのスライダの値を追加して、円柱の半径とシェルの厚さを設定します。

!

10.この操作は少し複雑であるため、手順を追って詳しく説明します。最終的な目標は、連続する各円柱の位置を定義する数値のリストを作成することです。

!

> a.**乗算用ノード (\*) -** 最初に、前の手順で指定した値を 2 倍にします。前の手順で指定した値は半径でしたが、ここでは円柱の直径を指定します。
>
> b.**Sequence -** 次に、このノードを使用して、数値の配列を作成します。最初の入力は、前の手順の *乗算用ノード (\*)* の *step* の値です。*start* の値は、*Number* ノードを使用して *0.0* に設定します。
>
> c.**Integer Slider -** Integer Slider ノードを接続して *amount* の値を設定します。これにより、作成される円柱の数が決まります。
>
> d.**出力のリスト -** このリストには、配列内の各円柱の移動距離が表示されます。このリストは、元のスライダのパラメータによって制御されます。

11.この手順は簡単です。前の手順で指定したシーケンスを、元の **Point.ByCoordinates** ノードの *x* 入力に接続するだけです。この操作により、*pointX* スライダが置き換えられます。このスライダは、削除してかまいません。これで、ビューポートに円柱の配列が表示されます(Integer Slider ノードで 0 よりも大きな値を設定してください)。

!

12.円柱の配列は、すべてのスライダに動的にリンクされたままの状態になっています。各スライダの値を変更して、円柱の定義がどのように更新されるかを確認してください。

!
