dart基本语法(1)

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 虚拟机从该函数开始加载并执行代码。

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

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

dart 复制代码
void main() => runApp(MyApp());

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

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

✅ 正确写法:

dart 复制代码
int age = 25;
String name = 'Alice';
print(name);

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

dart 复制代码
int age = 25  // 编译错误!
print('Hello')

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

dart 复制代码
if (true) {
  print('Inside block');
} // ← 这里不加分号

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

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


二、变量声明:var 关键字

1. 使用 var 声明可变变量

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

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

例如:

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

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

2. 显式类型声明更安全

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

dart 复制代码
class Student {
  String name;
  int id;

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

三、常量声明:constfinal

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

1. const:编译时常量

  • 特点

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

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

❌ 以下写法非法:

dart 复制代码
const now = DateTime.now(); // ❌ 错误:DateTime.now() 是运行时值

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

2. final:运行时常量

  • 特点

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

dart 复制代码
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 的差异,并结合图示与实践,开发者能够编写出更安全、高效、可维护的代码。

相关推荐
MonkeyKing3 天前
三棵树彻底拆解(Widget / Element / RenderObject)
flutter·dart
哈撒Ki4 天前
快速入门 Dart 语言
前端·flutter·dart
天渺工作室7 天前
Flutter 版的 NVM——FVM 使用指南
flutter·dart
Nathan202406168 天前
Flutter - InheritedWidget
flutter·dart
空中海10 天前
2.3 组件复用与组合
flutter·dart
空中海12 天前
3.3 第三方框架
flutter·dart
空中海14 天前
2.7 列表与滚动性能优化
flutter·性能优化·dart
空中海14 天前
2.4 绘制与动画
flutter·dart
空中海14 天前
2.6 表单与输入处理
flutter·dart
空中海14 天前
1.1 Flutter 简介与架构原理
flutter·dart