【Dart 入门日记】第1篇:变量声明详解------从 var 开始认识 Dart 的类型世界
作者 :灰灰勇闯IT
时间 :2026年1月
系列定位 :零基础记录 Dart 学习过程,适合编程新手、Flutter 初学者
本文重点 :深入理解var声明变量的规则、类型推断机制与常见陷阱
目录
- [1. 为什么从变量开始学 Dart?](#1. 为什么从变量开始学 Dart?)
- [2. Dart 中的变量:什么是
var?](#2. Dart 中的变量:什么是 var?) - [3. 使用
var声明变量的基本语法](#3. 使用 var 声明变量的基本语法) - [4. 实战演示:从整数到字符串的变量操作](#4. 实战演示:从整数到字符串的变量操作)
- [4.1 声明并修改一个年龄变量](#4.1 声明并修改一个年龄变量)
- [4.2 声明字符串类型的变量](#4.2 声明字符串类型的变量)
- [4.3 同类型数据相加:变量参与运算](#4.3 同类型数据相加:变量参与运算)
- [5. 关键规则:类型一旦确定,不可更改!](#5. 关键规则:类型一旦确定,不可更改!)
- [6. 对比其他声明方式:
varvsdynamicvs 显式类型](#6. 对比其他声明方式:var vs dynamic vs 显式类型) - [7. 常见误区与调试建议](#7. 常见误区与调试建议)
- [8. 小结 & 下期预告](#8. 小结 & 下期预告)
1. 为什么从变量开始学 Dart?
作为一门现代编程语言,Dart 是 Flutter 框架的"母语"。虽然它看起来和 JavaScript、Java 有些相似,但它的类型系统有自己独特的设计哲学。
而变量 ,是所有程序的基础。无论是存储用户输入、计算成绩,还是构建 UI 状态,都离不开变量。因此,从 var 开始学习 Dart,是最自然、最扎实的第一步。
🌟 我的学习动机 :
寒假在家不想荒废时间,决定挑战 Flutter 开发。但我知道,不掌握 Dart,后面写 Widget 会很吃力。所以,先沉下心来,把基础打牢!
2. Dart 中的变量:什么是 var?
在 Dart 中,var 是一个关键字 ,用于声明一个变量,同时让编译器自动推断其类型(这叫"类型推断")。
它的核心思想是:你不需要显式写出类型,但变量仍然具有明确的类型。
这和 Python 这类动态语言不同------Dart 是静态类型语言 ,即使你用 var,类型也在编译时就被确定了。
3. 使用 var 声明变量的基本语法
语法非常简单:
dart
var 变量名 = 初始值;
例如:
dart
var age = 20;
var name = "小明";
Dart 会自动判断:
age是int类型name是String类型
✅ 优点 :代码简洁,减少重复书写类型名
⚠️ 注意:一旦赋值,类型就固定了,不能随意更改!
4. 实战演示:从整数到字符串的变量操作
接下来,我通过几个小实验,带你一步步理解 var 的行为。
4.1 声明并修改一个年龄变量
假设一个人今年 20 岁,明年就 21 岁了。我们可以用变量来表示这个变化:
dart
void main() {
var age = 20; // 初始赋值为整数
print('今年 $age 岁');
age = 21; // 修改为另一个整数(合法!)
print('明年 $age 岁');
}
输出结果:
今年 20 岁
明年 21 岁

✅ 结论 :只要新值和原类型一致(都是 int),就可以重新赋值。
4.2 声明字符串类型的变量
同样地,我们也可以用 var 声明字符串:
dart
void main() {
var greeting = "Hello, Dart!";
print(greeting);
}
输出:
Hello, Dart!

这里,Dart 推断 greeting 的类型是 String,后续只能赋值字符串。
4.3 同类型数据相加:变量参与运算
变量不仅可以存储数据,还能参与计算。比如两个整数相加:
dart
void main() {
var score1 = 85;
var score2 = 90;
var total = score1 + score2; // total 被推断为 int
print('总分:$total');
}
输出:
总分:175

💡 提示:
$变量名是 Dart 的字符串插值语法,非常方便!
5. 关键规则:类型一旦确定,不可更改!
这是初学者最容易踩的"坑"!
虽然 var 看起来很灵活,但 Dart 在第一次赋值后就锁定了变量的类型。如果你试图赋一个不同类型的值,会报错!
❌ 错误示例:
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'.

🔍 为什么这样设计?
Dart 是为大型应用设计的语言。类型安全能避免很多运行时错误,提升代码健壮性。这也是它比 JavaScript 更适合构建复杂 App 的原因之一。
6. 对比其他声明方式:var vs dynamic vs 显式类型
除了 var,Dart 还提供两种变量声明方式,各有用途:
| 声明方式 | 示例 | 特点 |
|---|---|---|
var |
var name = "Alice"; |
类型推断,类型固定 |
| 显式类型 | String name = "Alice"; |
清晰明确,推荐团队开发使用 |
dynamic |
dynamic data = 100; |
类型可变,不推荐滥用 |
示例对比:
dart
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()里加几行
8. 小结 & 下期预告
✅ 本篇收获:
- 学会了用
var声明变量 - 理解了 Dart 的类型推断机制
- 掌握了"类型一旦确定不可更改"的核心规则
- 对比了
var、显式类型和dynamic的区别
🎯 行动建议 :
现在你可以尝试自己写一个小练习:
创建三个
var变量,分别存储姓名(String)、年龄(int)、是否学生(bool),然后打印一句完整的自我介绍。
💬 互动时间 :
你是怎么开始学编程的?在变量声明这一步有没有遇到奇怪的报错?欢迎在评论区留言,我们一起讨论!如果你觉得这篇文章对你有帮助,别忘了点赞 + 收藏 + 关注,你的支持是我持续更新的最大动力!
📎 附:本文所有代码均可直接复制运行
开发环境:Dart SDK 3.0+,推荐使用 VS Code + Dart 插件
