<Flutter Dart>varとfinal、constの違い

var

  • 型推測できる
  • 型指定できない
  • 変更可能(1回以上値をセットできる)
// var
// 型推測できる
var name = 'Bob';  // 値が文字列なのでString型と推測される  
// 型指定できない
// var String lastName = 'Pit';  // コンパイルエラー
// 変更可能(1回以上値をセットできる)
name = 'Tom';
name = 'Mary';

final

  • 型推測できる
  • 型指定できる
  • 変更不可能(1回だけ値をセットできる)
  • varよりもfinalを使うほうがよい
// 型推測できる
final name = 'Bob';
// 型指定できる
final int age = 27;
// 変更不可能(1回だけ値をセットできる)
// name = 'Tom';  // コンパイルエラー

// varよりもfinalを使うほうがよい
// 変更される可能性があるためソースを読みにくい。追いにくい
// →バグを生み出しやすい。デバッグしづらい

const

  • 型推測できる
  • 型指定できる
  • コンパイル時に1回だけ値をセットできる
  • finalよりもconstを使うほうがよい
// const
// コンパイル時に1回だけ値をセットできる
// 型指定できる
const name = 'Bob';
// name = 'Tom';  // コンパイルエラー

// 型指定できる
const String lastName = 'Pit';

// 値が実行に評価され、コンパイル時に評価できないためコンパイルエラー
// const upperCaseName = name.toUpperCase();

// myAgeとyourAgeはconstなので、totalAgeもコンパイル時に評価可能なのでエラーにならない
const myAge = 1;
const yourAge = 2;
const totalAge = myAge + yourAge;

// finalよりもconstを使うほうがよい
// compile-time constant
// finalよりも実行パフォーマンスが高い