【Flutter for OpenHarmony--Dart 入门日记】第1篇:变量声明详解——从 `var` 开始认识 Dart 的类型世界

【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. 对比其他声明方式:var vs dynamic vs 显式类型](#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 会自动判断:

  • ageint 类型
  • nameString 类型

优点 :代码简洁,减少重复书写类型名

⚠️ 注意:一旦赋值,类型就固定了,不能随意更改!


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() 里加几行 print,确认变量的值和类型是否符合预期。


8. 小结 & 下期预告

本篇收获

  • 学会了用 var 声明变量
  • 理解了 Dart 的类型推断机制
  • 掌握了"类型一旦确定不可更改"的核心规则
  • 对比了 var、显式类型和 dynamic 的区别

🎯 行动建议

现在你可以尝试自己写一个小练习:

创建三个 var 变量,分别存储姓名(String)、年龄(int)、是否学生(bool),然后打印一句完整的自我介绍。


💬 互动时间

你是怎么开始学编程的?在变量声明这一步有没有遇到奇怪的报错?欢迎在评论区留言,我们一起讨论!如果你觉得这篇文章对你有帮助,别忘了点赞 + 收藏 + 关注,你的支持是我持续更新的最大动力!


📎 附:本文所有代码均可直接复制运行

开发环境:Dart SDK 3.0+,推荐使用 VS Code + Dart 插件


相关推荐
恋猫de小郭42 分钟前
Android 禁止侧载将正式实施,需要等待 24 小时冷静期
android·flutter·harmonyos
FFF-X1 小时前
解决 Flutter Gradle 下载报错:修改默认 distributionUrl
flutter
程序员Ctrl喵20 小时前
异步编程:Event Loop 与 Isolate 的深层博弈
开发语言·flutter
前端不太难1 天前
Flutter 如何设计可长期维护的模块边界?
flutter
小蜜蜂嗡嗡1 天前
flutter列表中实现置顶动画
flutter
始持1 天前
第十二讲 风格与主题统一
前端·flutter
始持1 天前
第十一讲 界面导航与路由管理
flutter·vibecoding
始持1 天前
第十三讲 异步操作与异步构建
前端·flutter
新镜1 天前
【Flutter】 视频视频源横向、竖向问题
flutter
黄林晴1 天前
Compose Multiplatform 1.10 发布:统一 Preview、Navigation 3、Hot Reload 三箭齐发
android·flutter