Dartについて学んでみる①

## Dartとは?
Googleが開発したJavaの影響を受けた言語。Flutterのロジックを作るために使われている。
知らない文法がいくつかあったので、これから学習していく。

こちらの日本語のサイトおすすめです。
https://flutternyumon.com/

**まずはプロジェクトを作成。**
1. 好きな場所に作業用フォルダを作る
2. 作業用フォルダの中でプロジェクトを作成する
3. コマンド: dart create dart-プロジェクト名
3. 
ターミナルで実行
```
dart create dart-practice
```

VsCodeの画面

![スクリーンショット 2022-04-01 20.57.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2303722/ce0ff592-c00e-7ddf-31ab-ecd6335bcd93.png)

## 今回は知らない文法だけやっていきます。すみません...
変数の型で、Set リストが(同じ値を格納できない)をやってみる。

参考にしたサイト
https://flutternyumon.com/how-to-use-set/

dart_practice.dart
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };
  // boolen型だけなぜか型を書けない?
  var bool = {false};
  print(numbers);
  print(fruit);
  print(bool);
}
```

実行結果
```dart
{1, 2, 3, 4, 5}
{apple, banana, grape}
{false}
```

## １つ目の要素を取得するときの方法
**first**
１つ目の要素の値を返します。

dart_practice.dart
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };
  // boolen型だけなぜか型を書けない?
  var bool = {true};
  print(numbers.first);
  print(fruit.first);
  print(bool);
}

```
実行結果
```dart
1
apple
{true}
```

**last**

最後の要素を返します。
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };
  // boolen型だけなぜか型を書けない?
  var bool = {true};
  print(numbers.last);
  print(fruit.last);
  print(bool);
}
```
実行結果
```dart
5
grape
{true}
```

**isEmpty**
配列が空の場合は「true」、要素がある場合は「false」を返します。

```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };
  // boolen型だけなぜか型を書けない?
  var bool = {true};
  print(numbers.isEmpty);
  print(fruit.isEmpty);
  print("bool型だと${bool.isEmpty}になるよ???");
}

```
実行結果
```dart
true
false
bool型だとfalseになるよ???
```

**length**
配列の長さを返します。
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };

  print("int型の配列の数は${numbers.length}");
  print("String型の配列の数は${fruit.length}");
}
```
実行結果
```dart
int型の配列の数は5
String型の配列の数は3
```

**elementAt(int index)**
指定したインデックスの値を返します。
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };

  print(numbers.elementAt(0));
  print(fruit.elementAt(2));
}
```
実行結果
```dart
1
grape
```

**add(E value)**
配列の最後に新しい要素を追加します。


```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };

  numbers.add(6);
  fruit.add("orange");
  
  print(numbers);
  print(fruit);
}

```
実行結果
```dart
{1, 2, 3, 4, 5, 6}
{apple, banana, grape, orange}
```

**addAll(Set<E> Set)**
配列の最後に別の配列を結合します。

```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };

  numbers.addAll({6, 7, 8});
  fruit.addAll({"orange", "cherry", "peach"});

  print(numbers);
  print(fruit);
}

```

実行結果
```dart
{1, 2, 3, 4, 5, 6, 7, 8}
{apple, banana, grape, orange, cherry, peach}
```

**remove(Object? value)**
指定した値を配列から削除します。複数同じ値がある場合はインデックスの低い方が削除されます。
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };

  numbers.remove(3);
  fruit.remove("banana");

  print(numbers);
  print(fruit);
}
```
実行結果
```dart
{1, 2, 4, 5}
{apple, grape}
```

clear()
配列の要素を全て削除します。
```dart
void main() {
  // 初期値を定義
  // int型
  var numbers = <int>{1, 2, 3, 4, 5};
  // String型
  var fruit = <String>{
    "apple",
    "banana",
    "grape",
  };

  numbers.clear();
  fruit.clear();

  print(numbers);
  print(fruit);
}
```
実行結果
```dart
{}
{}
```

**以上です**

## 最後に
そういえば、Javaの配列の省略記法と似ていたので書き方を紹介しておきます。
```java
要素の型[] 配列変数名 = {値1, 値2, 値3, ...}
int[] scores1 = {20, 30, 40, 50, 80};
```