Flutterへ入門するためのDart基礎文法まとめ

Flutter

FlutterはDartで書かれたフレームワークですので、Dartの基本的な文法を理解しておく必要があります。
基本的な扱い方をメモ書き程度にまとめました。JavaScriptとかなり似た文法を持つので、違いを意識しながら読んでみてください。

変数と型

Dartでは、変数を宣言する際にデータ型を指定する必要があります。

int x = 10;
double y = 3.14;
String str = "Hello, World!";
bool flag = true;
List<int> list = [1, 2, 3];
Map<String, int> map = {"apple": 100, "banana": 200};

制御構文

Dartでは、JavaScriptと同様に、if文、for文、while文などの制御構文を使用することができます。

// if文
if (condition) {
  // conditionがtrueの場合に実行される処理
} else {
  // conditionがfalseの場合に実行される処理
}

// for文
for (var i = 0; i < 10; i++) {
  // 0から9までの数値を順番に処理する
}

// while文
while (condition) {
  // conditionがtrueの場合に繰り返される処理
}

関数

Dartの関数は、引数と戻り値に型を指定します。また、関数の引数にデフォルト値を指定することができ、オプションの名前付き引数を使用することもできます。

// 通常の関数定義
int add(int a, int b) {
  return a + b;
}

// 引数にデフォルト値を指定する
int addWithDefault(int a, [int b = 10]) {
  return a + b;
}

// 名前付き引数を使用する
int addWithNamedParams({int a, int b}) {
  return a + b;
}

// 名前付き引数を使用する(デフォルト値も指定する)
int addWithNamedParamsAndDefaults({int a = 0, int b = 0}) {
  return a + b;
}

クラスとオブジェクト

Dartでは以下のようにクラスの宣言を行います。

class MyClass {
  // フィールド
  int num;

  // コンストラクタ
  MyClass(int num) {
    this.num = num;
  }

  // メソッド
  void printNum() {
    print(num);
  }
}

Dartの場合、オブジェクトの作成時にnew 演算子を使用ぜず、クラスのコンストラクタを呼び出すことで作成します。

// オブジェクトの作成
var obj = MyClass(10);
obj.printNum(); // 10を出力

クラスの継承はextendsキーワードを使用して定義します。

class MySubclass extends MyClass {
  // フィールド
  String str;

  // コンストラクタ
  MySubclass(int num, String str) : super(num) {
    this.str = str;
  }

  // メソッド
  void printStr() {
    print(str);
  }
}

非同期処理

Dartでは、非同期処理のためのasync/await構文がサポートされています。下記の例では、fetchNum()関数が1秒間待機した後、10を返します。
Dartの非同期処理で結果を返すためには、Futureを使用します。また、asyncキーワードを付与した関数は、その関数内でawaitキーワードを使えます。awaitキーワードは、非同期処理が完了するまで待機します。

Future<int> fetchNum() async {
  await Future.delayed(Duration(seconds: 1)); // 1秒待つ
  return 10;
}

void main() async {
  var num = await fetchNum(); // 非同期処理の完了を待つ
  print(num); // 10を出力
}

Futureを使用した非同期処理のもう一つの例です。

Future<int> fetchNum() {
  return Future.delayed(Duration(seconds: 1), () => 10);
}

void main() {
  fetchNum()
    .then((num) => print(num)) // 10を出力
    .catchError((e) => print(e));
}
タイトルとURLをコピーしました