Dart 基础语法
Dart 基础语法 每种编程语言都有自己的一套基本规则,Dart 也不例外。 本章介绍 Dart 程序的基本结构、注释写法、语句与表达式的区别,以及标识符的命名规范。 程序结构与 main() 函数 Dart 文件名后缀为 .dart,每个 Dart 程序都必须有一个入口点——main() 函数。 程序从 main() 函数的第一行开始执行,到最后一行的花括号结束。 实例 一个最简 Dart 程序的结构: [mycode4 ..
Tutorial detail pages default to noindex.
Dart 基础语法
每种编程语言都有自己的一套基本规则,Dart 也不例外。
本章介绍 Dart 程序的基本结构、注释写法、语句与表达式的区别,以及标识符的命名规范。
程序结构与 main() 函数
Dart 文件名后缀为 .dart,每个 Dart 程序都必须有一个入口点——main() 函数。
程序从 main() 函数的第一行开始执行,到最后一行的花括号结束。
实例
一个最简 Dart 程序的结构:
void main() {
// 在这里编写你的代码
print('欢迎来到 RUNOOB Dart 教程!');
}
欢迎来到 RUNOOB Dart 教程!
让我们拆解这段代码的每个部分:
| 代码元素 | 说明 |
|---|---|
| void | 返回值类型,void 表示该函数不返回任何值 |
| main | 函数名,这是 Dart 规定的入口函数名,不可更改 |
| () | 参数列表,main() 可以不接收参数,也可以接收命令行参数 |
| { } | 函数体,花括号内的代码是函数执行的内容 |
| print() | 内置函数,用于向控制台输出文本 |
| ; | 语句结束符,Dart 中每条语句必须以分号结尾 |
Dart 严格要求每条语句以分号(;)结尾。忘记分号是初学者最常见的语法错误。好在 VS Code 的 Dart 插件会自动提示缺少分号的位置。
带命令行参数的 main() 函数
main() 函数可以接收一个字符串列表作为命令行参数:
实例
void main(List<String> args) {
// 输出参数个数
print('参数个数:${args.length}');
// 遍历并打印每个参数
for (var i = 0; i < args.length; i++) {
print('参数 $i: ${args[i]}');
}
}
$ dart run hello.dart runoob dart 教程 参数个数:3 参数 0: runoob 参数 1: dart 参数 2: 教程
这里用到了 List 类型和 for 循环,我们会在后续章节详细介绍。
注释写法
注释是对代码的解释说明,编译器会忽略注释内容。
好的注释能让别人(包括几个月后的你自己)更快理解代码的意图。
Dart 支持三种注释方式:
| 类型 | 语法 | 适用场景 |
|---|---|---|
| 单行注释 | // 注释内容 | 简短说明某一行代码的作用 |
| 多行注释 | /* 注释内容 */ | 跨多行的详细说明 |
| 文档注释 | /// 文档注释 | 为函数、类生成 API 文档 |
实例
/// 文档注释可以用 [dart doc] 命令生成 HTML 文档
void main() {
// 单行注释:输出欢迎信息
print('欢迎学习 Dart!'); // 行内注释:这也是合法的
/*
* 多行注释:适合写较长的说明
* 第二行注释
* 第三行注释
*/
print('RUNOOB 教程 - Dart 基础语法');
}
欢迎学习 Dart! RUNOOB 教程 - Dart 基础语法
注释的原则是"解释为什么,而不是做了什么"。代码本身已经说明了做了什么,注释应该解释为什么这样写,或者补充代码无法表达的背景信息。
语句与表达式
在 Dart 中,代码由语句(Statement)和表达式(Expression)组成。
理解两者的区别有助于你更好地组织代码逻辑。
表达式(Expression)
表达式是一段可以被求值的代码,它会产出一个值。
实例
// 以下每行都是一个表达式,它们都产出一个值
42; // 字面量表达式,值为 42
3 + 5; // 算术表达式,值为 8
'Hello'.length; // 属性访问表达式,值为 5
(10 > 5); // 关系表达式,值为 true
}
语句(Statement)
语句是执行某个动作的指令,它不产出值。
实例
// 变量声明语句:声明一个变量并赋值
var name = 'RUNOOB';
// 函数调用语句:调用 print() 执行输出动作
print(name);
// 控制流语句:根据条件决定执行哪段代码
if (name.length > 3) {
print('名称长度大于 3');
}
}
RUNOOB 名称长度大于 3
简单来说:表达式产生值,语句执行动作。
你可以在需要值的地方使用表达式,但不能使用语句。
一个常见的误区是把所有代码都当成"语句"。实际上,Dart 中很多结构(如函数调用、变量赋值)本身就是表达式,这意味着它们可以被嵌套使用。这是 Dart 和其他 C 系语言的共同特点。
标识符命名规范
标识符(Identifier)是你给变量、函数、类等代码元素起的名字。
Dart 对标识符有一些规则和约定:
命名规则(必须遵守)
标识符只能由字母、数字、下划线(_)和美元符号($)组成。
标识符不能以数字开头。
标识符不能是 Dart 的保留关键字(如 class、if、var 等)。
命名约定(推荐遵守)
| 代码元素 | 命名风格 | 示例 |
|---|---|---|
| 类名 | 大驼峰(UpperCamelCase) | StudentInfo、HttpClient |
| 枚举类型 | 大驼峰(UpperCamelCase) | Color、Status |
| 库名、文件名 | 小写 + 下划线(lowercase_with_underscores) | my_utils、user_service |
| 变量名 | 小驼峰(lowerCamelCase) | userName、maxCount |
| 函数名 | 小驼峰(lowerCamelCase) | getUserInfo()、calculateTotal() |
| 常量名 | 小驼峰(lowerCamelCase) | piValue、defaultPort |
| 私有成员 | 下划线前缀 | _internalState、_privateMethod() |
实例
各种命名风格的实际应用:
class UserAccount {
// 公开成员:小驼峰
String userName;
// 私有成员:下划线前缀(只在本文件中可访问)
String _password;
// 构造函数
UserAccount(this.userName, this._password);
// 公开方法:小驼峰
bool verifyPassword(String input) {
return input == _password;
}
// 私有方法:下划线前缀
void _encryptPassword() {
// 加密逻辑...
}
}
// 入口函数:小写
void main() {
// 变量名:小驼峰
var userAccount = UserAccount('runoob', '123456');
// 常量:小驼峰(Dart 风格)
const maxLoginAttempts = 3;
print('用户名: ${userAccount.userName}');
print('最大登录尝试次数: $maxLoginAttempts');
}
用户名: runoob 最大登录尝试次数: 3
Dart 的命名约定中,常量使用小驼峰(lowerCamelCase),而不是其他语言常见的全大写+下划线(UPPER_CASE)。这是 Dart 社区的独特风格,请务必注意。
