●変数の宣言
//整数型
int number = 0;
//文字列型
String str = 'Dart';
//類推
var one = 1;
varを使用した変数宣言は変数の型を明示的に指定しない。
Dartの型推論機能が変数に代入される値からその型を推測する。
上記の場合はint型と推測される。
●他のソースからの参照可否設定
_をつけて宣言した変数は他のソースから参照できない。
int view = 0;
int _notView = 0;
●関数
全ての関数は別の名前がつけられている必要がある。
//サンプル
int func(int a, int b) {
return a + b;
}
int:
戻り値の型。
func:
関数名。
(int a, int b) :
パラメータリスト。例では二つの整数a、bを引数として受け取る。
{ return a + b;}:
関数が呼び出された際に実行されるコードのブロック。
例ではa+bの結果を返す。
●関数(短縮形式)
int func(int a, int b) => a + b;
=>の表記を使って{}とreturnを省略可能。
文字列の中での変数の使用例。
void greet(String name, [String greeting = 'Hello']) {
print("$greeting, $name!");
}
●位置引数と省略可能引数
int func(int a, [int b = 0]) => a + b;
int aは関数呼び出すに必須の引数。
[int b = 0]は省略可能な引数で初期値が0となる。
●final
//値の初期化後、再代入は不可
final int zero = 0;
final one = 1; // 型推論もできる
上記の例だとzero, oneの値の変更は不可。
ただし、finalでリストを宣言した場合、リストへの追加や削除は可能。
変数が初期化された後、その変数に対する再代入は禁止。
その変数が指すオブジェクトの内部状態(プロパティや要素)は変更可能。
プログラムが実行されて初めて値が決定されるような場合や、
インプットとして与えられた情報を変更不可として取り扱いたい場合に使用する。
●const
変数はコンパイル時にその値が確定し、そのメモリ領域は完全に不変。
constで作成されたインスタンスがすべて同一のメモリ参照を共有する。
constで宣言された変数やオブジェクトは、その内容も含めて完全に変更不可能
const int two = 2;
const three = 3; // こっちでも型推論できる
constは完全に不変でどんな変更も許可されない。
上記のtwoやthreeはコンパイル時に確定し、プログラム全体で一意のインスタンスを共有する。
コンパイル時に値が固定されるオブジェクトに使用する。
プログラムが実行される前に値が既にわかっている場合や、
同一の不変のインスタンスを複数箇所で共有したい場合に適している。
Dartは型の修飾子としてfinalとconstが存在する。
finalはJavaのfinalと同じ意味で再代入不可。
constはコンパイル時定数。つまり、「再代入不可 + そのメモリ領域の書き換え不可」となる。
final int zero = 0;
// 型推論
final one = 1;
const int two = 2;
//型推論
const three = 3;
●null safety
//nullを許容
int? a = 0;
//nullを許容しない
int a = 0;
型名?のような型がnullになりうる型
?が付かない型がnullを許容しない型。
int? a = null;
// a == nullであればnull、a != nullであればa.toString()の値
a?.toString();
// a == nullであれば0、a != nullであればaの値
a ?? 0;