Dart始めました


## この文書の目的

2020年4月7日からの緊急宣言を受けた会社の休業で、暇を持て余しているので、勉強を始めることにした。

### 環境

macOS Mojave 10.14.6 をインストール済のMacBook Pro (13-inch, Mid 2012)で。

### 情報源

こういう時にこそ先人の書いたQiitaの記事を読むべきとは思うけれど、まずは[原典](https://dart.dev/)にあたる。

## インストール

[https://dart.dev/get-dart](https://dart.dev/get-dart) によると、[Homebrew](https://brew.sh)でのインストールを勧められた。

```bash
$ brew tap dart-lang/dart && brew install dart
...
==> Tapping dart-lang/dart
Cloning into '/usr/local/Homebrew/Library/Taps/dart-lang/homebrew-dart'...
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 1556 (delta 19), reused 20 (delta 9), pack-reused 1522
Receiving objects: 100% (1556/1556), 282.14 KiB | 568.00 KiB/s, done.
Resolving deltas: 100% (948/948), done.
Tapped 4 formulae (29 files, 357.9KB).
==> Installing dart from dart-lang/dart
==> Downloading https://storage.googleapis.com/dart-archive/channels/stable/rele
######################################################################## 100.0%
==> Caveats
Please note the path to the Dart SDK:
  /usr/local/opt/dart/libexec
==> Summary
🍺  /usr/local/Cellar/dart/2.7.2: 474 files, 463.3MB, built in 2 minutes 45 seconds
```

いったん```hash -r```してから、```dart --version```すると、とりあえずインストールできていることは確認できた。

```bash
$ dart --version
Dart VM version: 2.7.2 (Mon Mar 23 22:11:27 2020 +0100) on "macos_x64"
```

## Hello World的なヤツ

```dart:hello.dart
void main() {
    print('Hello World');
}
```

とりあえず、こんな```hello.dart```ファイルを作った。

```bash
$ dart ./hello.dart
Hello World!
```

もう敢えて書くまでもなかった。

## 文法とか

プログラミング言語を極めないで、適当に齧っていると「よく使うんだけれど書き方がそれぞれ微妙に異なる」場面に遭遇して困惑することになる。
会社ではガッツリ事務系の部門の「なんかパソコンとか？に詳しい人」扱いなので、業務上一番使うプログラミング言語はExcel VBAだったりするので、条件分岐や繰り返し構文の書き方については、なにか(自分にとっては)新しいプログラミング言語に触れるたびに戸惑うことになる[^1]。

### 条件分岐

```dart
if (条件) {
    ...
} else if (条件) {
   ...
} else {
   ...
}
```

なるほど、```else if```だ。```elsif```でも```elif```でも```ElseIf```でもない。コレが、いつも地味に混乱するポイントだ。

### 繰り返し

for文とforEach methodが使える。これは混乱することはなさそうだ。
```<List>```型を宣言しておくと、配列になる。

```dart
for (int i=0; i<10; i++) {
    print(i);
}

List lists = ['a', 'b', 'c', 'd'];
for (var i in lists) {
    print(i);
}

lists.forEach((i) {print(i);});
```

ところで、```print()```は、改行するのな。そもそも行頭でなんの宣言もしてないのに、```print()```が使えるというのは、組み込み関数的な何かなのか、、、と思ったら、どうやら```dart.core```というライブラリで定義されていて、自動で```import```されるようになっているらしい。

> [https://api.dart.dev/stable/2.7.2/dart-core/dart-core-library.html](https://api.dart.dev/stable/2.7.2/dart-core/dart-core-library.html)
> ##dart:core library
> Built-in types, collections, and other core functionality for every Dart program.
> 
> This library is automatically imported.
> 

### 型

[dart:coreのドキュメント](https://api.dart.dev/stable/2.7.2/dart-core/dart-core-library.html)を雑に眺めただけで、様々な型やclassがあることが分かる。

- int, double
- bool
- String, StringBuffer
- List
- Map
- DateTime
- Uri

などなど。最近のモダンな言語っぽい。

そして、型宣言は前置なので、```int i=0;```みたいに書けばいい。```var i:Int = 0;```みたいな書き方に馴染みづらいと思っていたので、ここは何も考えなくて良くて、自分には都合がイイ。
とはいえ、```int```なのか、```Int```なのか？みたいなのには、しばらく悩まされそう。

### 関数定義

関数については、特に変わったところはなさそう。

```dart:hello.dart
void main() {
    String hello = say();
    print(hello);
}

String say(){
    return "Hello World!";
}
```

これを```dart ./hello.dart```すると、```Hello World!```が出力される。

つらつら見てると、名前付き変数とかあるっぽい。コレも特段変わったところはなさそう。

## 他に覚えることは？

とりあえず、他にも色々覚える必要がありそうだけれど、準備運動はここまでということにして、Flutterに飛び込むことにする。




[^1]: Excel VBAのFOR文やIF文が特殊なために、余計にワケ分からなくなってるだけな気もする。