基本的なFlutter：Dartについて理解する （第二部）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1762420/d92687f4-41ab-5f1c-9509-54d65d4a1dca.png)
<h3><strong>Objects</strong></h3>
<p>Dartのすべてがオブジェクトです！ <span class="has-inline-color has-pale-pink-color">null</span>を含むすべての<span class="has-inline-color has-pale-pink-color">オブジェクト</span>は、あるクラスのインスタンスであり、これらのクラスのすべてはオブジェクトクラスから継承します。これを確認するために、<span class="has-inline-color has-pale-pink-color">is</span>の演算子と<span class="has-inline-color has-pale-pink-color">is!</span>の演算子を使用して、オブジェクトがインスタンスであるかクラスのタイプであるか確認出来ます。以下の例を見てみましょう。</p>

<!-- wp:code -->
<pre class="wp-block-code"><code>void main() {
  print('"Shashank" is an instance of "String" class: ${"Shashank" is String}');
  print('7799 is an instance of "int" class: ${7799 is int}');
  print('79.97 is an instance of "double" class: ${77.99 is double}');
  print('true is an instance of "bool" class: ${true is bool}');
  print('null is an instance of "null" class: ${null is Null}');
  print('"Anything even strings" are an instance of "Object" class: ${"Anything even strings" is Object}');
  print('null is an instance of "Object" class: ${null is Object}');
}</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>上記のコードの結果は以下の通りです。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>"Shashank" is an instance of "String" class: true
7799 is an instance of "int" class: true
79.97 is an instance of "double" class: true
true is an instance of "bool" class: true
null is an instance of "null" class: true
"Anything even strings" are an instance of "Object" class: true
null is an instance of "Object" class: true</code></pre>
<!-- /wp:code -->

したがって、DartでのすべてがObjectであり、classの名前が識別子データ型 (Data Type Identifier)であることがはっきりとわかります。上記の例での\$の演算子はdynamicデータを文字列に入れるために使用されています。マルチレベル値の場合、\$ {person.name}または\$ {77.99はdouble}のように{}とともに\$を使用します。Single valueまたは変数を使用する場合は、「私の名前は\$name」のように、{}なしでプレーンな$を使用できます。ここで、nameは変数です。

<h3><strong>Classes(クラス</strong>)</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>他のオブジェクト指向プログラミング言語と同様に、classはDartのコア機能です。Classはオブジェクトの仕様を定義できます。クラスには、<span class="has-inline-color has-pale-pink-color">UpperCamelCase</span>命名規則に従って名前を付ける必要があります。Classの内で、Objectがどのように表示されるかを定義します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>データ間のより複雑な関係を表現したい場合、または特定の機能を単一のビルディングブロック (one building block)にカプセル化したい場合は、通常、独自のクラスを作成します。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>class Product {
  var name = 'MacBook Pro';
  var price = 1299.99;
}

void main() {
  var product1 = Product();
  var product2 = Product();
  product2.name = 'iPad Pro';
  product2.price = 999.99;
  print(product1);
  print(product1.name);
  print(product1.price);
  print(product2);
  print(product2.name);
  print(product2.price);
}
</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>上記のコードの結果は以下の通りです。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>Instance of 'Product'
MacBook Pro
1299.99
Instance of 'Product'
iPad Pro
999.99
</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>2つのinstance変数（class-level）を持つ<span class="has-inline-color has-pale-pink-color">Product</span>という名前のclassがあります。instance変数という意味はいくつかの値で初期化するclass内の変数です。 ここでは、<span class="has-inline-color has-pale-pink-color">dart type-inference</span>のため、varを使用して変数を定義しています。Dartは、var型の変数に割り当てられた値型を自動参照することについて便利です。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>次に、<span class="has-inline-color has-pale-pink-color">main（）{...}</span>関数でProduct というclassを使用する2つの新しいObjectsを作成します。<span class="has-inline-color has-pale-pink-color">objectName.instanceVariableName</span>のようにドット「.」を使用してclass / instance変数にアクセスできます。例えば、<span class="has-inline-color has-pale-pink-color">product1.name</span>です。これらの変数に新しい値を割り当てることもできます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dartでprivate変数を宣言するには、<span class="has-inline-color has-pale-pink-color">_description</span>のようにinstance変数名の前に_を使用します。これにより、変数がprivateになり、class外でアクセスできなくなります。そして、Lists、Maps、const、finalを見てみましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3><strong>Final </strong><strong>と</strong><strong>const</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dartである<span class="has-inline-color has-pale-pink-color">const</span>および<span class="has-inline-color has-pale-pink-color">final</span>のようなキーワードは、固定値変数を作成するために使用されます。それでは、違い点は何でしょうか？</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><span class="has-inline-color has-pale-pink-color">Const</span>はコンパイル時定数(compile-time constant)を提供します。つまり、constはプログラミングのコンパイル中で、constの値を宣言する必要があります。それに対して、<span class="has-inline-color has-pale-pink-color">final</span>は実行時定数(runtime constant)であり、プログラムの実行中にその値を割り当てることができることを意味します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>よく理解するために、以下の例を見てみましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>int calculateSquare(int value){
  return value * value;
}

void main() {
  const double PI = 3.1415;
  final int square_7 = calculateSquare(7);

  print(PI);
  print(square_7);
}
</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>上記の例のように、<span class="has-inline-color has-pale-pink-color">PI</span>の値はコンパイル時に認識されます。しかし、<span class="has-inline-color has-pale-pink-color">square_7</span>の値はコンパイル時に認識されいなく、実行時に計算されます。これは、<span class="has-inline-color has-pale-pink-color">final</span>（実行時定数）と<span class="has-inline-color has-pale-pink-color">const</span>（コンパイル時定数）の主な違い点です。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3><strong>Dart</strong><strong>のリスト</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>他のプログラミング言語のArraysと同様に、Dartは、固定数の類似または<span class="has-inline-color has-pale-pink-color">dynamic</span>のデータ型の変数のいずれかを保持できるArraysのようなデータ構造を構築するためにリストというclassを提供します。Dartには、リストの作成するための<span class="has-inline-color has-pale-pink-color">［］</span>の構文もあります。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3><strong>固定的なリスト</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>固定長であるリストは、その長さを指定することで宣言できます。例えば：</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>List&lt;dynamic&gt; aFixedList = new List(9);
List&lt;String&gt; anotherFixedList = new List(7);
</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p><span class="has-inline-color has-pale-pink-color">List &lt;dynamic&gt;</span>は、9文字の長さのリストを作成します。リストはジェネリック型であるため、リスト内の要素のデータ型は<span class="has-inline-color has-pale-pink-color">&lt;&gt;</span>内のキーワードによって確定されます。最初の件では、リストの長さは9で、要素のデータ型は<span class="has-inline-color has-pale-pink-color">dynamic</span>です。そして、2番目の件では、リストの長さは7で、要素のデータ型は<span class="has-inline-color has-pale-pink-color">string</span>です。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3><strong>動的なリスト</strong>(Growable lists)</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>動的リスト (Growable lists)という意味は<span class="has-inline-color has-pale-pink-color">List（）</span>の初期化方法で引数又は値なしで定義されたリストです。以下の例を見てみましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>List&lt;String&gt; aGrowableList = new List();
aGrowableList.add("Shashank");
aGrowableList.add("Biplav");

//changing a value at an existing index in a list
aGrowableList&#91;0]= 'Love';
aGrowableList&#91;1]= 'Dart';
</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":3} -->
<h3><strong>Maps</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Python辞書またはJavaScriptのリテラルのobjectに精通している場合、Dartの<span class="has-inline-color has-pale-pink-color">maps</span>も同様です。基本的に、mapsは<span class="has-inline-color has-pale-pink-color">key-value</span>のペアのコレクションです。 Dartには、mapの作成に使用されるMap classがあります。<span class="has-inline-color has-pale-pink-color">Map</span>には、どんなタイプの<span class="has-inline-color has-pale-pink-color">key</span>と<span class="has-inline-color has-pale-pink-color">value</span>を含めることができます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>次の例を見てみましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>var trainCompartments = new Map&lt;int, String&gt;();

//assign values to the keys
trainCompartments&#91;1] = 'ENGINE';
trainCompartments&#91;2] = 'WOMEN CHAIR CAR';
trainCompartments&#91;3] = 'WOMEN SLEEPER CAR';
trainCompartments&#91;4] = 'MEN CHAIR CAR';
trainCompartments&#91;5] = 'MEN SLEEPER CAR';
print("trainCompartments=&gt; $trainCompartments");
</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>ここで、<span class="has-inline-color has-pale-pink-color">1、2、3、4、5</span>はインデックスではなくkeysです。<span class="has-inline-color has-pale-pink-color">Print</span>ステートメントは、次の結果を出します。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>trainCompartments=&gt; {1: ENGINE, 2: WOMEN CHAIR CAR, 3: WOMEN SLEEPER CAR, 4: MEN CHAIR CAR, 5: MEN SLEEPER CAR}
</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>Mapの上の<span class="has-inline-color has-pale-pink-color">.entries</span>プロパティからアクセスすることで、<span class="has-inline-color has-pale-pink-color">map</span>のアイテムを反復処理できます。</p>
<!-- /wp:paragraph -->
上記はDartに関する知識です。Dartがどのように機能するかをより明確にご理解いただくことを願っています。シリーズの次回の記事でお会いしましょう。

[第一部はこちら](https://qiita.com/ints/items/a6974a759d83fd333deb)
[株式会社INTS](https://ints.vn/)　開発部　レー・ジャン