Dartの勉強1−2:変数とデータ型
ChatGPT先生に監修して頂いてDartの学習を再開します。
これまでの記述に不足していたところを適宜くわえていきます。今回は、変数とデータ型です。
変数とは、数値や文字列等のデータを保存しておく入れ物で、何らかの名前をつけます。
int year = 2025;
これで、変数yearに2025という整数の値が保存されたことになります。<p>
データ型とは、変数に入っている値の種類です。先ほどの例は整数ということでintを冒頭につけて、yearは整数だと明示しています。
- 型推論
Dartは変数をvarをつけて最初の値を与えると勝手に型を推察してくれます。var name = 'John';これで変数nameには文字型になり、Johnが値として代入されます。
- null安全性
nullというのは、何もない状態で整数でも文字でもなんでもない状態です。この状態だと処理ができずに止まってしまうことが多いので、普通に変数を宣言した場合は、必ず何かしらの値が入っている状態にする必要があります。ただし、objectのメソッド等でnullを許容している場合もあります。この場合は、以下のようにデータ型後に?をつけて変数を宣言します。String? name //nullを許容する。void main() { String name; assert(name == null); //nullを許容しないので、ここでエラーになる } - late
nullを許容しないけど、とりあえず、変数だけ宣言する方法としてlateがあります。lateの使い方には2つのケースがあります。
①後で値が入ることを前提とした宣言late String name; //ここでは値が入っていないので、nullになっている。 void main() { name = 'John'; //ここで初めて値が入った。 print(name); //nullではないのでエラーにならない }②実際に、その変数が呼び出されるまで値が入らない。
String myName() { return 'John'; } void main() { late String name = myName(); //この段階ではnameはnull状態。でも呼び出されていないので実害なし print(name); //ここでnameが呼び出されて初めて値が代入された(初期化された)。 } - final
finalは実行時に値が入り、その後、実行中は値が変わらない変数のことです。void main() { final now = DateTime.now(); //プログラムが実行され最初に呼び出された日時が代入される。コンパイルされた時点では未定。 print(now); now = DateTime.now(); //ここでエラーとなる。 } =エラーメッセージ= compileDDC main.dart:4:10: Error: Expected ';' after this. name = 'john' ^^^^^^ main.dart:4:3: Error: Can't assign to the final variable 'name'. name = 'john' ^^^^ - const
constは定数なので、コンパイル時に定義した後は変わりません。
ですが、こんなことができます。void main() { var foo = const []; print(foo); //空の配列が表示 foo = [3, 5, 4]; print(foo); //[3, 5, 4]と表示され、エラーになりません! foo = [2, 4]; print(foo); //[2, 4]と表示され、エラーになりません! }