【Dart 入门日记】第1篇:变量声明详解——从 var 开始认识 Dart 的类型世界
作者:灰灰勇闯IT 时间:2026年1月 系列定位:零基础记录 Dart 学习过程,适合编程新手、Flutter 初学者 本文重点:深入理解 var 声明变量的规则、类型推断机制与常见陷阱 
目录
- 1. 为什么从变量开始学 Dart?
- 2. Dart 中的变量:什么是 var?
- 3. 使用 var 声明变量的基本语法
- 4. 实战演示:从整数到字符串的变量操作
- 4.1 声明并修改一个年龄变量
- 4.2 声明字符串类型的变量
- 4.3 同类型数据相加:变量参与运算
- 5. 关键规则:类型一旦确定,不可更改!
- 6. 对比其他声明方式:var vs dynamic vs 显式类型
- 7. 常见误区与调试建议
- 8. 小结 & 下期预告
1. 为什么从变量开始学 Dart?
作为一门现代编程语言,Dart 是 Flutter 框架的“母语”。虽然它看起来和 JavaScript、Java 有些相似,但它的类型系统有自己独特的设计哲学。
而变量,是所有程序的基础。无论是存储用户输入、计算成绩,还是构建 UI 状态,都离不开变量。因此,从 var 开始学习 Dart,是最自然、最扎实的第一步。
🌟 我的学习动机: 寒假在家不想荒废时间,决定挑战 Flutter 开发。但我知道,不掌握 Dart,后面写 Widget 会很吃力。所以,先沉下心来,把基础打牢!
2. Dart 中的变量:什么是 var?
在 Dart 中,var 是一个关键字,用于声明一个变量,同时让编译器自动推断其类型(这叫“类型推断”)。
它的核心思想是:你不需要显式写出类型,但变量仍然具有明确的类型。
这和 Python 这类动态语言不同——Dart 是静态类型语言,即使你用 var,类型也在编译时就被确定了。
3. 使用 var 声明变量的基本语法
语法非常简单:
var 变量名 = 初始值;
例如:
var age = 20;
var name = "小明";
Dart 会自动判断:
- age 是 int 类型
- name 是 String 类型
✅ 优点:代码简洁,减少重复书写类型名 ⚠️ 注意:一旦赋值,类型就固定了,不能随意更改!
4. 实战演示:从整数到字符串的变量操作
接下来,我通过几个小实验,带你一步步理解 var 的行为。
4.1 声明并修改一个年龄变量
假设一个人今年 20 岁,明年就 21 岁了。我们可以用变量来表示这个变化:
void main() {
var age = 20; // 初始赋值为整数
print('今年 $age 岁');
age = 21; // 修改为另一个整数(合法!)
print('明年 $age 岁');
}
输出结果:
今年 20 岁
明年 21 岁
](https://www.171host.com/wp-content/uploads/2026/01/20260121093831-69709e9720e18.png)
✅ 结论:只要新值和原类型一致(都是 int),就可以重新赋值。
4.2 声明字符串类型的变量
同样地,我们也可以用 var 声明字符串:
void main() {
var greeting = "Hello, Dart!";
print(greeting);
}
输出:
Hello, Dart!
](https://www.171host.com/wp-content/uploads/2026/01/20260121093831-69709e97c05cf.png)
这里,Dart 推断 greeting 的类型是 String,后续只能赋值字符串。
4.3 同类型数据相加:变量参与运算
变量不仅可以存储数据,还能参与计算。比如两个整数相加:
void main() {
var score1 = 85;
var score2 = 90;
var total = score1 + score2; // total 被推断为 int
print('总分:$total');
}
输出:
总分:175
](https://www.171host.com/wp-content/uploads/2026/01/20260121093832-69709e986f2ef.png)
💡 提示:$变量名 是 Dart 的字符串插值语法,非常方便!
5. 关键规则:类型一旦确定,不可更改!
这是初学者最容易踩的“坑”!
虽然 var 看起来很灵活,但 Dart 在第一次赋值后就锁定了变量的类型。如果你试图赋一个不同类型的值,会报错!
❌ 错误示例:
void main() {
var age = 20; // 推断为 int
age = "二十"; // ❌ 错误!不能把 String 赋给 int 类型的变量
}
运行时会抛出类似错误:
Error: A value of type 'String' can't be assigned to a variable of type 'int'.
](https://www.171host.com/wp-content/uploads/2026/01/20260121093833-69709e9920a78.png)
🔍 为什么这样设计? Dart 是为大型应用设计的语言。类型安全能避免很多运行时错误,提升代码健壮性。这也是它比 JavaScript 更适合构建复杂 App 的原因之一。
6. 对比其他声明方式:var vs dynamic vs 显式类型
除了 var,Dart 还提供两种变量声明方式,各有用途:
| var | var name = "Alice"; | 类型推断,类型固定 |
| 显式类型 | String name = "Alice"; | 清晰明确,推荐团队开发使用 |
| dynamic | dynamic data = 100; | 类型可变,不推荐滥用 |
示例对比:
void main() {
// 1. var:类型固定
var x = 10;
// x = "hello"; // ❌ 报错
// 2. 显式类型:更清晰
int y = 20;
// y = "world"; // ❌ 报错
// 3. dynamic:类型可变(慎用!)
dynamic z = 30;
z = "now I'm a string"; // ✅ 合法!
print(z); // 输出:now I'm a string
}
📌 建议: 初学阶段可以用 var 快速上手,但随着项目变大,尽量使用显式类型声明(如 int age = 20;),这样代码更易读、更安全。
7. 常见误区与调试建议
❌ 误区1:“var 就是动态类型”
→ 错!Dart 的 var 是静态类型 + 类型推断,不是动态类型。
❌ 误区2:“我可以随时改变变量的类型”
→ 不行!除非你用 dynamic,否则类型一旦确定就不能改。
✅ 调试技巧:
- 使用 Dart DevTools 或 VS Code 的调试器查看变量类型
- 在 IDE 中悬停变量,会显示推断出的类型(如下图示意)
- 遇到类型错误时,仔细看报错信息中的 “can’t be assigned to a variable of type …”
🛠️ 我的调试习惯: 每次写完一段代码,我都会在 main() 里加几行 print,确认变量的值和类型是否符合预期。
8. 小结 & 下期预告
✅ 本篇收获:
- 学会了用 var 声明变量
- 理解了 Dart 的类型推断机制
- 掌握了“类型一旦确定不可更改”的核心规则
- 对比了 var、显式类型和 dynamic 的区别
🎯 行动建议: 现在你可以尝试自己写一个小练习:
创建三个 var 变量,分别存储姓名(String)、年龄(int)、是否学生(bool),然后打印一句完整的自我介绍。
💬 互动时间: 你是怎么开始学编程的?在变量声明这一步有没有遇到奇怪的报错?欢迎在评论区留言,我们一起讨论!如果你觉得这篇文章对你有帮助,别忘了点赞 + 收藏 + 关注,你的支持是我持续更新的最大动力!
📎 附:本文所有代码均可直接复制运行 开发环境:Dart SDK 3.0+,推荐使用 VS Code + Dart 插件
