Dartの変数の種類
Dartには、以下の種類の変数があります。
- var変数
- late変数
- final変数
- const変数
- nullable変数
今回は以上5つの変数について説明をしていきます。
var変数
varは、Dartの動的型付けを表すキーワードであり、宣言時に型を指定せずに使用できます。つまり、変数に初期値を割り当てることによって、宣言された変数の型を自動的に推測してくれます。
// 型が事前にわからない場合、var変数を使用する
var count = 0; // 型がint型であることが推測される
var name = 'John Doe'; // 型がString型であることが推測される
late変数
late変数は、宣言時に値を割り当てず、後で初期化することができる変数です。Dartは、late変数を使用する場合、その変数が遅延初期化されることを保証します。変数の初期化を行わない場合は、エラーが発生してしまいます。
// 初期化されない変数が必要な場合、late変数を使用する
late int count; // countは後で初期化される
count = 10; // countを初期化
var変数とlate変数の違い
var変数
変数の宣言と初期化を同時に行う必要がある(値を入れる必要がある)また、変数の型を自動的に推測してくれる
late変数
変数の宣言を行い、その後に初期化を行うことができる(値を後から入れることができる)変数の型を設定する必要がある
つまり、var変数とlate変数の違いとしては、初期化のタイミングと変数の型の設定方法である。
// bad code
var count; // var変数を使用するときは宣言と初期化を同時に行う必要がある
// good code
var count = 10; // countの初期化が行われている
// bad code
late count; // late変数では型を設定する必要がある
// good code
late int count; // countは後で初期化される
// late変数では宣言と初期化を同時に行うことも可能だが
// 初期化を後からできるというlate変数の良さを使いこなせていない
late int count = 10;
final変数
final変数は、宣言後に値を変更できない変数です。final変数には、宣言時またはコンストラクター内で値を割り当てる必要があります。final変数は、一度しか初期化されず、変更されないことが保証されます。
// 値を変更しない変数が必要な場合、final変数を使用する
final int MAX_COUNT = 100; // MAX_COUNTは、プログラム中で変更されない値である
final String message = 'Hello, world!'; // messageは、後で変更されない値である
const変数
const変数は、宣言後に値を変更できない変数であり、宣言時に値を割り当てる必要があります。const変数は、コンパイル時に評価されます。つまり、const変数は、実行時ではなくコンパイル時に定義されます。
// 定数であり、実行時に変更されないことが保証される場合、const変数を使用する
const PI = 3.14; // PIは、実行時に変更されない値である
const String GREETING = 'Hello, world!'; // GREETINGは、実行時に変更されない値である
nullable変数
nullable変数は、nullを含めることができる変数です。Dartでは、nullable変数を宣言する場合、その変数がnullを許容することを示す必要があります。変数に値を割り当てる前に、nullチェックが必要です。nullable変数には、?を使って宣言します。
// 変数にnullを許容する必要がある場合、nullable変数を使用する
String? name; // nameはnullを含む可能性がある
if (name != null) {
print(name.length); // nullでない場合にのみ、name.lengthを使用
}
これらのの変数の種類を使い分けることで、プログラムがより意図通りに動作し、かつ保守性が向上することがわかります。