【Flutter/Dart】基本構文を復習!変数や定数、dynamicの使い方

この記事からわかること
- Flutter/Dartの基本構文
- 変数の使い方
- 厳格な値の型を扱う上での注意点
- タプルと配列の違い
- オプショナル型とは?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Xcode:16.0
- Flutter:3.29.2
- Dart:3.7.2
- Mac M1:Sonoma 14.6.1
Dartを学び出した私ですが、他のプログラミング言語と構文や変数の使い方が混じらないように整理しながらまとめていきたいと思います。
テスト環境:DartPad
Dartのコードの動作をサクッと試したい場合は公式が提供しているプレイプレイグラウンド「DartPad」がおすすめです。ブラウザで実行することができるのでインストールなどの手順を踏まずとも利用可能です。

末尾のセミコロン(;)が必要な言語
Dartはコードの末尾にセミコロン(;
)が必要な言語になります。つけ忘れるとコンパイル時にError: Expected ';' after this.
というエラーを吐くので注意してください。
また全ての末尾に付与するわけではなく、「変数の定義」や「関数の呼び出し時」に必要で、「クラスや関数の定義」の際は不要になります。
Dartの変数/定数の宣言方法
Dartは基本的に「静的型付け言語」になります。「静的型付け言語」とは変数を宣言する際にデータ型を記述する必要のある言語のことです。iOSのSwiftやAndroidのKotlinも同じく「静的型付け言語」になります。
変数の定義
変数を定義するにはデータ型 変数名 = リテラル
形式で記述します。
var
キーワードを使用することで型の記述を省略(型推論)することも可能です。この場合は値の代入時に変数の型が確定するのでその後に別の型を入れようとするとエラーになります。
定数の定義
定数を定義する場合はfinal
キーワードを使用します。
同じ定数の定義にconst
キーワードを使用する方法もあります。final
キーワードとの違いは値が確定するタイミングでfinal
は実行時(=コンストラクタで変更可能)、const
はコンパイル時(=コンストラクタで変更不可能)となっています。
動的型付け言語
ただDartに限ってはdynamic
型を使用することで「動的型付け言語」として動作することも可能になっています。これにより以下のように途中で異なるデータ型を格納してもエラーになることはありません。
Dartのデータ型の種類
データ型 | 説明 |
---|---|
int |
整数型(※) |
double |
浮動小数点数型 |
num |
int と double の両方を扱えるデータ型 |
String |
文字列型 |
bool |
真偽値型 |
dynamic |
型の制約なし |
※整数型に関してはSwiftやKotlinでは「データ長」と「符号の有無」ごとに用意されていますがDartの場合は用意されておらず、一律で「64ビット(一応環境依存)の符号あり」のようです。
Nullable型
DartではNull Safetyが導入されておりnull
を許容するかどうかを?
で指定できます。
Nullable
型のデータを取得する際にnull
の場合にデフォルト値を取得したい場合は??
演算子を使用することで代わりの値を設定できます。
他にもアンラップなどの基本的な使い方はSwiftと同じなのでこちらを参考にすると良いかもしれません。
コレクション型
配列や辞書型(連想配列)などはコレクション型と呼ばれます。
データ型 | 説明 |
---|---|
List |
配列を表すデータ型(リスト) |
Map |
キーと値のペアを持つデータ型 |
Set |
重複のない集合を表すデータ型 |
List
Listは配列のようなデータ構造。順序を保持し、重複も許可。
Map
Mapはキーと値のペアを管理するデータ構造。キーは一意で、順序は保証されない。
Set
Setも配列のようなデータ構造。順序は保証されず、重複も許可しない。
List(配列)の使い方
一番よく使うであろうList
型の使い方を確認していきます。まず変数に格納する際は以下のように[]
で値を囲う形で記述します。
dynamic
型を使用することで異なるデータ型でも同じ配列で保持させることも可能です。
要素を追加する
要素を追加する場合はadd
やinsert
を使用します。
要素を削除する
要素を削除する場合はremove
やremoveAt
を使用します。
要素を取得する
要素を取得する場合は[Index番号]
でアクセスできlength
で要素数を取得できます。存在しないインデックスを指定するとRangeError
を吐きます。
関数
DartではreturnType functionName(parameters) {}
形式で関数を定義します。呼び出す時はfunctionName()
形式で記述します。
引数を{}
で囲むと名前付き引数になり、呼び出し時に未指定の場合初期値が使用されるようになります。引数の指定を必須にしたい場合はrequired
を付与します。
条件分岐
続いて条件分岐処理をまとめていきます。
if文
switch文
三項演算子 (?:)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。