LoginSignup
4
8

More than 3 years have passed since last update.

今更ながらFlutterのDart構文を整理したら、lateとか増えてた

Posted at

:book: Flutterの記事を整理し本にしました :book:

  • 本稿の記事を含む様々な記事を体系的に整理し本にまとめました
  • 今後はこちらを最新化するため、最新情報はこちらをご確認くださ
  • 20万文字を超える超大作になっています!!

はじめに

  • ↑のとおり、Dartで本を書いているのですが、付録にDartの構文を整理することになり、今更ながらまとめたら、意外と知らない構文がありました。
  • late とか使えるようになったの知らなかった。。。

まとめ

全体的な特徴

Dartの基本的な構文、文法、予約語を紹介します。

Flutterには、JavaやPythonのような、基本的なプログラミングの変数や定数、制御構文、クラス/メソッドが準備されています。

また、private、static、finalなどの修飾子に加え、ジェネリクスやイテレーション、匿名関数なども一通り使えます。

一方で、javascriptのawait/asyncのような非同期も使えます。

キーワードや特徴的な部分だけを取り上げています。
なお、詳細は公式ドキュメントなどをご参照ください。

演算

  • +,-,*,/,% (四則演算)
  • ++,-- (インクリメント,デクリメント)
  • >> (シフト)
  • &,^,! (ビット演算)
  • &&,||,! (AND,OR,NOT)
  • ?? (null判定)
  • += (複合代入)
  • as (型キャスト)
  • is (型チェック)

制御構文

  • if,else (条件分岐)
  • switch,case (多分岐)
  • for,while,forEach, for in, dowhile (ループ)
  • break,continue (制御)

変数の型

  • int (整数)
  • double (実数)
  • num (数値)
  • String (文字列(Runesも可))
  • bool (ブール値)
  • [] (配列)
  • List (リスト)
  • Set (集合)
  • Map (Key/Value)
  • Symbol (識別子)
  • late (遅延初期化)
    • Dart2で導入

文字列

sample.dart
print("文字列の表示") // 文字列の表示
print("$_counter") // 変数の表示
print("${_counter + 1}") // 式の展開

""と''で文字列展開される / 文字列展開されないの違いはなし

変数修飾子

  • final (再代入不可)
  • const (定数)
  • var (型推論)

例外処理

  • try (例外が起きる可能性)
  • catch (例外が起きたときの処理)
  • finally (例外に関わらず実施する処理)
  • throw (例外を投げる)

クラス

  • class (クラスの定義)
  • コンストラクタ
    • インスタンス生成時に呼ばれる
MyData.dart
class MyData {
  String name;
  // MyData(String name){ this.name = name;}と等価
  MyData(this.name);
}
  • new (インスタンスの生成)
    • 省略可
  • extends (継承)
    • 1つだけ
  • abstruct (抽象クラス)
    • newできない
  • implements (インタフェース)
    • interfaceはキーワードは無いが、classでインタフェースを作る
    • 複数可
  • with (mixinを作る)

フィールド/メソッド

  • _xxx (プライベート変数)
  • static (static化(クラスに属するフィールド/メソッド)
  • noSuchMethod() (メソッドがない時に呼ばれるメソッド)
    • メタプログラミング
  • アノテーション (メタ情報を付加)
  • get/set (getter,setter)
main.dart
//hogeクラス
int get data => _data; //getter
set data(int data){this._data = data}; //setter

//使う側
hoge.data = data;
print(hoge.data);
  • class(String name) : super(name) (イニシャライザリスト)
    • :で区切った初期化処理を実施
  • factory (factoryコンストラクタの定義)

インポート

  • import (パッケージをインポート)
  • import as xxx (xxxで名前をつける)
  • import show yyy (yyy のみを使う)
  • import hide zzz (zzz は除外する)

メソッド

  • method1(param: 1, param2: "data")
    • 名前付きパラメタ
  • method2(String key, [String opt])
    • オプションパラメタ
    • 引数がなくても呼び出せる
  • method3(ip = '127.0.0.1', port = 8080)
    • デフォルトパラメタ
    • 引数がない時に値を入れる
  • methods4(func)
    • funcはメソッド。関数を変数に入れて渡せる
    • 関数の引数を第一級クラスオブジェクトとして扱える
  • method5(data) => {print(data)}
    • 匿名関数
    • 簡素な関数の定義の命名することなく定義

補足

  • enum (列挙型)
  • Sum<Int> (ジェネリクス)
  • async,await (非同期)
  • Future (非同期の戻り値)
  • assert (アサーション)

カスケード記法

  • カスケード記法
    • ..で同じオブジェクトのメソッドを連続で呼び出せる
    • メソッドチェーンに似ているが、戻り値ではなくオブジェクトの連続操作時のオブジェクト名を省略できる
var list2 = new List()..add(1)..add(2)
4
8
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
4
8