変数を宣言する際には、変数に格納する値の型を宣言します。
ここでは型を限定せずに変数を宣言する方法について説明します。
目次
型が特定できない場合の変数の宣言
通常、宣言した以外の型の値を変数に代入しようとするとエラーになります。
int value1;
value1 = 10; // OK
value1 = 10.1; // NG(A value of type 'double' can't be assigned to a variable of type 'int'.)
value1 = 'string'; // NG(A value of type 'String' can't be assigned to a variable of type 'int'.)
しかし、プログラム実行時まで扱う値の型が実行時までわからないことも多々あります。
このような場合に変数を宣言するには、varやdynamicを使用します。
var型
変数初期化時(宣言時)に代入する値をもとに型推論を行い、値を格納できます。
ただし型推論を行うのは変数初期化時のみであり、この変数に再度値を代入する際、異なる型の値を代入するとエラーになります。
var value1 = 10; // OK(型推論により整数型の変数として扱う)
value1 = 20; // OK(型推論された型と同一の型の値なので代入可)
value1 = 'string'; // NG(型推論された型と異なるため代入不可)
変数宣言時に初期化値を代入しない場合はエラーにはなりません。
var value1;
value1 = 20;
value1 = 'string';
dynamic型
dynaminは格納する型が限定されない動的な型です。
初期化時と異なる型の値も再代入することができます。
dynamic value1 = 10; // OK
value1 = 20; // OK
value1 = 'string'; // OK
また、ListやSetの要素の型としても指定することができ、要素ごとに異なる型の値を格納できます。
List<dynamic> arrya1 = [1, 'value', true];
var/dynamicまとめ
外部ファイルからデータを取得する際など、プログラム実行時まで値の型がわからない場合に活用できる、varやdynamicを紹介しました。
varやdynamicのみでプログラミングすることもできますが、変数は代入することが目的ではなく、そのあとに参照して計算や結果の出力などに利用することが目的です。
どんな値を格納するのか整理して、その後の処理時にいちいち型のチェックを行う必要がないよう、varやdynamicの使用は必要最小限にとどめておいたほうがいいと思います。
コメント