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 的
var
與let
都可
動態改變型別,Dart 的var
則不可
動態改變型別 - 動態改變型別在實務上並不建議,除了造成 debug 困難外,compiler 也較難最佳化,
var
在 Dart 的改變是好的