AIGC标识 Dart之标识符与关键字

思维导图

一、前言

学习一门编程语言时,最开始接触到的往往不是复杂算法,而是一个个名字。

变量要有名字,函数要有名字,类要有名字,文件里各种声明也会不断出现名字。与此同时,我们还会遇到 classvoidifreturn 这些看起来像单词,但又不能随便拿来当名字的内容。

这篇文章就把 Dart 中两个非常基础、但很容易混在一起的概念讲清楚:标识符与关键字。

如果把一段代码看成一篇文章,那么标识符就是我们自己起的名字,关键字就是 Dart 语言提前规定好的固定词汇。一个负责表达业务含义,一个负责组成语言语法。

二、一句话理解

标识符是开发者给变量、函数、类等程序元素起的名字;关键字是 Dart 语言保留的、有固定语法含义的单词。

简单说:

  • 标识符:我们能起的名字。
  • 关键字:语言已经占用的词。
  • 写代码时:名字要清楚,关键字不能乱用。

三、什么是标识符

标识符就是代码中的“名字”。

在 Dart 中,变量名、函数名、类名、参数名等都属于标识符。它们的作用不是让编译器觉得好看,而是帮助我们区分不同的程序元素。

3.1 变量名

变量名用于标识一份数据。

void main() {
  String userName = 'Tom';
  int userAge = 18;

  print(userName);
  print(userAge);
}

这里的 userNameuserAge 就是标识符。它们分别表示用户名和用户年龄。

好的变量名应该能让人直接看出数据含义,而不是只能靠猜。

3.2 函数名

函数名用于标识一段可以被重复调用的逻辑。

void printUserName(String name) {
  print('用户名:$name');
}

这里的 printUserName 是函数名,也是标识符。读到这个名字时,我们大致能知道它的作用是打印用户名。

3.3 类名

类名用于标识一类对象的抽象。

class UserInfo {
  String name;
  int age;

  UserInfo(this.name, this.age);
}

这里的 UserInfo 是类名,也是标识符。它表示“用户信息”这类数据结构。

类名通常使用大驼峰命名法,也就是每个单词首字母大写。

四、标识符命名规则

标识符不是想怎么写就怎么写,Dart 对它有明确规则。

4.1 可以包含哪些字符

Dart 标识符通常可以由字母、数字、下划线 _ 和美元符号 $ 组成。

void main() {
  String userName = 'Tom';
  int age2 = 20;
  String _privateName = 'private';
}

这些写法都是常见的合法标识符。

不过在实际开发中,$ 不建议随便用于普通命名。它更多出现在生成代码、框架内部或特殊场景里。

4.2 不能以数字开头

标识符可以包含数字,但不能以数字开头。

void main() {
  int age1 = 18; // 正确
  // int 1age = 18; // 错误
}

原因很简单:如果名字可以用数字开头,编译器在识别数字和变量名时就会变得混乱。

4.3 不能使用关键字

关键字已经被 Dart 语言占用,不能直接拿来做普通标识符。

void main() {
  // String class = 'Dart'; // 错误
  String className = 'Dart'; // 正确
}

class 是 Dart 中用于声明类的关键字,所以不能直接作为变量名。

4.4 区分大小写

Dart 是区分大小写的语言。

void main() {
  String name = 'Tom';
  String Name = 'Jerry';

  print(name);
  print(Name);
}

nameName 是两个不同的标识符。

虽然语法允许这样写,但实际开发中不建议只靠大小写区分变量,否则阅读成本会很高。

五、Dart 常见命名规范

语法规则解决的是“能不能写”,命名规范解决的是“该不该这样写”。

5.1 变量和函数使用小驼峰

变量名、函数名通常使用小驼峰命名法:第一个单词小写,后续单词首字母大写。

String userName = 'Tom';

void getUserInfo() {
  print('获取用户信息');
}

这种写法在 Dart 和 Flutter 项目中非常常见。

5.2 类名使用大驼峰

类名通常使用大驼峰命名法:每个单词首字母都大写。

class UserPage {}

class LoginController {}

类名表示的是一种类型,所以命名时要尽量使用名词或名词短语。

5.3 私有成员以下划线开头

Dart 中没有 private 这个访问修饰符。库级私有通常通过下划线 _ 表示。

class UserService {
  String _token = '';

  void _refreshToken() {
    print('刷新 token');
  }
}

_token_refreshToken 表示它们只在当前库内可见。

这里要注意:下划线不是装饰,它在 Dart 中有实际访问控制含义。

六、什么是关键字

关键字是 Dart 语言提前定义好的特殊单词。

它们在语法中有固定含义,用来声明变量、定义类型、控制流程、处理异步、表达继承关系等。

6.1 声明相关关键字

声明相关关键字用于告诉 Dart:这里要定义某种程序结构。

class User {}

void main() {
  var name = 'Tom';
  final age = 18;
  const city = 'Shanghai';
}

这里的 classvoidvarfinalconst 都是关键字。

它们不是普通名字,而是语法的一部分。

6.2 流程控制关键字

流程控制关键字用于控制代码执行路径。

void main() {
  int score = 90;

  if (score >= 60) {
    print('及格');
  } else {
    print('不及格');
  }
}

这里的 ifelse 就是流程控制关键字。

类似的还有 forwhileswitchcasebreakcontinuereturn 等。

6.3 面向对象相关关键字

Dart 是面向对象语言,所以有一组和类、继承、接口相关的关键字。

class Animal {
  void eat() {
    print('eat');
  }
}

class Cat extends Animal {
  @override
  void eat() {
    super.eat();
    print('cat eat');
  }
}

这里的 classextendssuper 都和面向对象有关。

@override 严格来说是元数据注解,不是关键字,但它经常和重写方法一起出现,学习时可以顺手建立印象。

6.4 异步相关关键字

Dart 中的异步编程会用到 asyncawait

Future<void> loadData() async {
  await Future.delayed(Duration(seconds: 1));
  print('数据加载完成');
}

async 表示这个函数中可能存在异步操作,await 表示等待一个异步结果完成。

后续学习 Future、Stream、网络请求时,这两个词会频繁出现。

七、标识符和关键字的区别

标识符和关键字最容易混淆,因为它们看起来都是英文单词。

7.1 来源不同

标识符来自开发者命名。

String userName = 'Tom';

这里的 userName 是我们自己起的名字。

关键字来自 Dart 语言定义。

final age = 18;

这里的 final 是 Dart 已经规定好的词。

7.2 作用不同

标识符用于区分程序元素,比如变量、函数、类。

关键字用于表达语法结构,比如声明、判断、循环、返回。

可以这样理解:

  • 标识符负责“这是谁”。
  • 关键字负责“这里要做什么语法动作”。

7.3 是否能随便修改不同

标识符通常可以在合理范围内重命名。

String userName = 'Tom';
String nickName = 'Tom';

只要同步修改引用位置,变量名可以调整。

关键字不能改。

// fin age = 18; // 错误
final age = 18; // 正确

final 必须写成 Dart 规定的样子,不能自己创造一个类似的词。

八、常见误区

8.1 只要能运行就是好名字

代码能运行,只说明语法没有错,不代表命名质量好。

void main() {
  int a = 18;
  String b = 'Tom';
}

这段代码语法没问题,但 ab 很难表达业务含义。

更好的写法是:

void main() {
  int userAge = 18;
  String userName = 'Tom';
}

命名不是给机器看的,更多是给未来读代码的人看的。

8.2 用拼音命名更方便

学习阶段偶尔使用拼音可以理解,但长期开发不建议这样做。

String yongHuMing = 'Tom';

这类命名会降低代码的统一性,也不利于团队协作。

更推荐:

String userName = 'Tom';

技术代码里保持统一的英文命名,会让项目更容易维护。

8.3 关键字记不住就先死背

关键字不建议孤立死背。

更好的方式是把它放回使用场景里理解:

  • 看到 class,想到定义类。
  • 看到 if,想到条件判断。
  • 看到 return,想到返回结果。
  • 看到 asyncawait,想到异步等待。

关键字是随着代码场景不断熟悉的,不需要第一天全部背完。

九、总结

这一篇我们主要理解了 Dart 中的标识符与关键字。

标识符是我们给变量、函数、类等程序元素起的名字,它要符合 Dart 的命名规则,也要尽量表达清楚含义。

关键字是 Dart 语言提前规定好的特殊单词,它们有固定语法作用,不能随便拿来当普通名字使用。

学习 Dart 基础语法时,不要只停留在“这个词能不能写”的层面,还要继续追问:“这个名字是否清楚?”“这个关键字在语法中承担什么作用?”。

当你能分清标识符和关键字,也就开始真正理解代码中哪些部分由我们表达业务,哪些部分由语言规则来组织结构。

posted @ 2026-07-12 18:45  好的佩奇  阅读(16)  评论(0)    收藏  举报