點燈坊

失くすものさえない今が強くなるチャンスよ

使用 var 實現 Type Inference

Sam Xiao's Avatar 2024-03-14

Dart 可使用 var 支援 Type Inference。

Version

Dart 3.3

Type Inference

void main() {
  var name = 'Sam';
  var age = 10;
  var gender = true;

  print('name: $name');
  print('age: $age');
  print('gender: $gender');
}
  • 變數可以不宣告型別,Dart 自動由 指定值 做 Type Inference

JavaScript 亦可使用 var,唯 var 有 scope 問題,在 ES6 之後漸由 let 取代,var 在 JavaScript 已經視為 deprecated 寫法

Type Can’t be Changed

void main() {
  var name = 'Sam';
  name = 1; // (X)

  print('name $name');
}
  • 變數經過 var 推導過後,只能改變其 ,不能動態改變其 型別

JavaScript 使用 var 宣告後,依然仍夠 動態改變 型別

Conclusion

  • var 一開始為 JavaScript 所使用,後來也被其他語言使用,但 ES6 之後 JavaScript 自己反而以 let 取代 var,且 Dart 的 var 反而接近 JavaScript 的 let
  • JavaScript 的 varlet動態改變型別,Dart 的 var不可 動態改變型別
  • 動態改變型別在實務上並不建議,除了造成 debug 困難外,compiler 也較難最佳化,var 在 Dart 的改變是好的

Reference

Dart, Variables