Dart 是由 Google 开发的一种现代化、面向对象、支持强类型和类型推断的编程语言。自 Flutter 框架崛起以来,Dart 已成为跨平台移动开发的主流语言之一。其语法简洁、性能优异,并具备良好的工具链支持。本文将系统讲解 Dart 的基本语法规则、变量与常量机制、核心数据类型及编码规范,并结合图示与代码示例,帮助开发者快速掌握 Dart 编程基础。


一、Dart 语言基础规范

1. 文件后缀必须为 .dart

Dart 源代码文件必须以 .dart 作为扩展名,这是 Dart 编译器和开发工具识别源文件的标准方式。

例如:

  • ✅ 正确:main.dartutils.dartcalculator.dart
  • ❌ 错误:app.jsscript.py(无法被 Dart 工具链处理)

良好的命名习惯有助于项目结构清晰。建议采用小写字母加下划线(snake_case)风格,如 user_repository.dart

在这里插入图片描述

上图展示了典型的 Dart 项目结构,其中每个文件均以 .dart 结尾。


2. 程序入口:main() 方法

每个可独立运行的 Dart 程序必须包含一个 main() 函数,它是程序执行的起点。Dart 虚拟机从该函数开始加载并执行代码。

void main() {
  print('Hello World');
}
  • main 函数通常返回 void,但也可省略返回类型(Dart 支持隐式 void)。
  • 它可以接收命令行参数:
void main(List<String> arguments) {
  print('Arguments: $arguments');
}

在 Flutter 应用中,main() 通常用于初始化应用:

void main() => runApp(MyApp());

3. 语句结束需加分号(;),但 {} 块不加

Dart 继承了 C 语言家族的语法风格,绝大多数语句必须以分号 ; 结尾。这是语法解析的关键规则。

✅ 正确写法:

int age = 25;
String name = 'Alice';
print(name);

❌ 错误写法(缺少分号将导致编译失败):

int age = 25  // 编译错误!
print('Hello')

例外:由大括号 {} 包裹的代码块(如函数体、控制结构体)} 后不需要加分号

if (true) {
  print('Inside block');
} // ← 这里不加分号

这一规则有助于区分语句与代码块,避免语法歧义。

在这里插入图片描述

上图展示了最简单的 “Hello World” 程序输出效果,验证了 main() 函数与 print() 语句的正确使用。


二、变量声明:var 关键字

1. 使用 var 声明可变变量

当需要存储可能变化的数据时,使用 var 声明变量:

void main() {
  var s = '10';
  print(s);
  s = '12';
  print(s);
}
  • var 表示“自动推断类型”(Type Inference)。
  • 变量在第一次赋值时确定其类型,之后不可更改类型。

例如:

var count = 100;     // 推断为 int
count = 200;         // ✅ 允许
// count = 'abc';    // ❌ 错误:不能将 String 赋给 int

在这里插入图片描述

上图演示了 var 变量的两次赋值过程,均保持字符串类型,程序正常运行。

2. 显式类型声明更安全

虽然 var 简洁,但在公共接口、类成员或函数参数中,推荐显式声明类型以提升可读性和健壮性:

class Student {
  String name;
  int id;

  Student(this.name, this.id);
}

三、常量声明:constfinal

Dart 提供两种常量机制,适用于不同场景。

1. const:编译时常量

  • 特点

    • 值必须在编译时完全确定
    • 表达式中不能包含运行时变量(如函数调用、用户输入)。
    • 所有 const 对象在内存中共享同一实例(单例优化)。
  • 适用场景:数学常数、API 地址、固定配置等。

void main() {
  const t = 3.1415926;
  const e = t * 2; // ✅ 允许:t 是 const,表达式可编译期计算
  print(e);
}

❌ 以下写法非法:

const now = DateTime.now(); // ❌ 错误:DateTime.now() 是运行时值

在这里插入图片描述

上图展示了 const 常量的计算与输出,程序成功运行并打印 6.2831852

2. final:运行时常量

  • 特点

    • 值在运行时初始化一次,之后不可修改。
    • 可使用运行时表达式(如当前时间、随机数)。
    • 每次创建对象时生成新实例。
  • 适用场景:唯一会话 ID、启动时间、用户设备信息等。

void main() {
  final time = DateTime.now();
  print(time);
}

在这里插入图片描述

上图显示了 final 变量捕获当前时间并成功打印,体现了其运行时初始化特性。

3. const vs final 对比总结

特性 const final
初始化时机 编译时 运行时
是否可含变量 ❌ 否 ✅ 是
内存优化 共享实例 独立实例
典型用途 π、版本号、静态配置 当前时间、UUID、用户 Token

💡 Flutter 开发提示:在 Widget 构造中尽可能使用 const,可显著减少重建开销,提升渲染性能。


结语

Dart 以其简洁的语法、强大的类型系统和高效的运行时表现,成为现代应用开发的理想选择。掌握其基本语法规则——包括文件规范、main 入口、变量/常量声明、数据类型及控制结构——是迈向 Flutter 或服务端 Dart 开发的关键一步。通过理解 varfinalconst 的差异,并结合图示与实践,开发者能够编写出更安全、高效、可维护的代码。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐