0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dartイントロダクション

Posted at

元記事

ところどころ意訳しています.

前書き

Flutterを始めるために,Dartというプログラミング言語に慣れる必要がある.
このページはDartの優しい紹介である.
もしコードの例を読んで十分であれば,このページをスキップしても良い.
このシリーズを通してDart専門家になる必要はない.

Dart

FlutterはDartで記述されている.
DartはJavaやJavascript,C言語系を書いたことがあれば馴染み深い.

以下のコードは次の小さい処理を行う.

  1. dart.devからデータをフェッチする
  2. 返されたjsonをデコードする
  3. コンソールに出力する

このプログラムを理解できる自信があるなら次のページに行って構わない.

import 'dart:convert';
import 'package:http/http.dart' as http;

class Package {
  final String name;
  final String latestVersion; 
  final String? description;

  Package(this.name, this.latestVersion, {this.description});

  @override
  String toString() {
    return 'Package{name: $name, latestVersion: $latestVersion, description: $description}';
  }
}

void main() async {
  final httpPackageUrl = Uri.https('dart.dev', '/f/packages/http.json');
  final httpPackageResponse = await http.get(httpPackageUrl);
  if (httpPackageResponse.statusCode != 200) {
    print('Failed to retrieve the http package!');
    return;
  }
  final json = jsonDecode(httpPackageResponse.body);
  final package = Package(
    json['name'],
    json['latestVersion'],
    description: json['description'],
  );
  print(package);
}

このプログラムは主に2つに分けられる.

  1. Packageクラスの宣言
  2. main関数に含まれるビジネスロジック

PackageクラスはDartでクラスを扱うときに使うであろう多くの最も一般的な機能を含む.

Dart言語は型安全である.
型安全とは,変数の値は変数の型と合っていることを保証するために静的な型確認を行うこと.
クラスを定義したとき,Stringというアノテーションが必要であるが,型推論があるためしばしば不要となる.
この例におけるmain関数では,多くの行でfinal variableName =から始まっている.
明示的に型を指定していないにも関わらず,これらの行は型安全である.

Dartは完全なNull安全である.
この例では,descriptionメンバはString?型で定義されている.
String?の最後の?はnullになり得ることを意味する.
残り2つの変数はnullにはならず,nullを代入しようとしてもコンパイルエラーが起こる.
Packageクラスのコンストラクタで確認できる.
2つの必須引数(位置引数)と1つのオプション引数(名前引数)を取る.

次はmain関数の例である.
Flutterアプリを含むすべてのDartプログラムはmain関数から始まる.
この関数は,使うライブラリをインクルードする,asyncで関数をマークする,関数呼び出しを行う,if文の制御フローなどいくつかのDartの特徴を例示する.

初期化コードはどこへ行ったの?

Flutterアプリを開始するエントリーポイントはlib/main.dartにある.
デフォルトmain関数は以下のようになっている.

lib/main.dart
void main() {
  runApp(const MyApp());
}

runApp()を呼ぶ前に1~2フレーム文の素早い初期化を行う.
ウィジェットツリーはまだ作成されていないことに注意する.
ディスクやネットワーク上からデータを読み込むなど時間がかかる初期化を行う場合,メインのUIスレッドをブロックしないようにする方法で行うこと.
より詳しくは以下のサイトを参考にすること.

すべてのステートフル・ウィジェットは,ウィジェットが作られ,ウィジェットツリーに追加されたときに呼び出されるinitState()関数を持つ.
この関数はオーバーロードすることができ,そこで初期化を行えるが,このメソッドの最初にsuper.initState()を記述する必要がある.

最後に,ホットリロードはinitStatemainを呼び直さない.
ホットリスタートは呼び直す.

Next : ウィジェット

このページはDartの紹介であり,FlutterとDartのコードを読むのに慣れ親しむ手助けをした.
このページのすべてを完全に理解できなくても,Dart言語の構文に慣れてくるだろう.
次のセクションでは,ウィジェットというFlutterアプリのブロックの組み立て方について学ぶ.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?