Dart 入門:言語概要(Web向け)

コンピュータ

Webページを作成するために必要そうな機能を調べてみました。

変数宣言

var
型推論あり、再代入OK(JS/TS … let)
final
型再代入不可、ただし値自体が変更可能な場合あり(JS/TS … cosnt)
const
コンパイル時定数。値が完全に固定されたもの(JS/TS … cosnt)

var x = 10;
final y = 20;
const z = 30;

型システム

Dart は 静的型言語ですが、型推論が強め。

int count = 0;
String message = "hello";

var price = 100;        // int
var name = "dart web";  // String

動的型の扱いも出来るようですが、必要がる時だけにしておいた方がよさそう。

dynamic value = 123;
value = "文字列もOK";

関数定義

通常

int add(int a, int b) {
  return a + b;
}

短縮

int add2(int a, int b) => a + b;

引数に = でデフォルト値も設定可能

void greet([String name = "Guest"]) {
  print("Hello $name");
}

文字列

ダブル・シングル・テンプレート

var s1 = 'hello';
var s2 = "world";
var mix = "$s1 $s2";
var expr = "1 + 2 = ${1 + 2}";

複数行文字列

var html = """
<div>
  <p>Hello Dart</p>
</div>
""";

リスト(配列), マップ(辞書)

var list = [1, 2, 3];
var names = <String>["a", "b", "c"];

var map = {
  "name": "dart",
  "lang": "web"
};

要素追加

  list.add(4);
  map["age"] = "10";

Null

  String? text;  // nullを許容
  String value2 = "ok"; // null不可

nullチェックが必須

print(text?.length); // nullなら実行されない

クラス

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void hello() {
    print("Hello $name");
  }
}

非同期処理

Future<String> fetchMessage() async {
  await Future.delayed(Duration(seconds: 1));
  return "Done";
}

void main() async {
  var msg = await fetchMessage();
  print(msg);
}

DOM操作

import 'package:web/web.dart' as web;

final element = web.document.querySelector('#output') as web.HTMLDivElement;

イベントハンドラ

  element.onClick.listen((event) {
    print("click!");
  });

import と ファイル分割

ファイル名:util.dart

String greet2(String name) => "Hello $name";

ファイル名:main.dart

import 'util.dart';

void main() {
  print(greet2("Dart"));
}

ラムダ(クロージャ)

  var inc = (int x) => x + 1;
  print(inc(5));
list.forEach((e) => print(e));

アクセス制御

name
public(制限なし)
_name
library private(ファイル内のみ)先頭に_

コメント

// これは一行コメント
/*
  これは複数行コメント
  複数行をまとめてコメントアウトできる
*/
/// これはドキュメントコメント
/// IDE でマウスを当てると表示される説明として使われる
void doSomething() {}

感想

ごくごく普通なモダンなプログラミング言語といった感じがします。

  • 基本的にdartファイルを分割しても生成されるjsは1つ。
  • “public / protected / private” のような複雑なアクセス修飾子は無し。

コメント