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” のような複雑なアクセス修飾子は無し。


コメント