【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 插件


相关推荐
猛扇赵四那边好嘴.2 小时前
Flutter 框架跨平台鸿蒙开发 - 居家好物收纳应用开发教程
flutter·华为·harmonyos
[H*]2 小时前
Flutter框架跨平台鸿蒙开发——AnimatedIcon动画图标
运维·nginx·flutter
夜雨声烦丿2 小时前
Flutter 框架跨平台鸿蒙开发 - 育儿知识大全应用开发教程
flutter·华为·harmonyos
菜鸟小芯2 小时前
【开源鸿蒙跨平台开发先锋训练营】DAY7 第一阶段知识要点复盘
flutter·harmonyos
kirk_wang2 小时前
Flutter艺术探索-Flutter发布应用:Android与iOS打包流程
flutter·移动开发·flutter教程·移动开发教程
_OP_CHEN2 小时前
【前端开发之HTML】(三)HTML 常见标签(下):图文、链接与实战,解锁网页交互新姿势!
前端·html·交互·前端开发·网页开发·界面美化
晨非辰2 小时前
Linux文件操作实战:压缩/传输/计算10分钟速成,掌握核心命令组合与Shell内核交互秘籍
linux·运维·服务器·c++·人工智能·python·交互
程序员老刘·3 小时前
跨平台开发地图:2025跨平台技术简单总结 | 2026年1月
flutter·跨平台开发·客户端开发
夜雨声烦丿14 小时前
Flutter 框架跨平台鸿蒙开发 - 思维导图开发教程
flutter·华为·harmonyos