当前位置: 首页 > news >正文

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

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

http://www.jsqmd.com/news/1178165/

相关文章:

  • 2026年7月最新长沙百达翡丽官方售后维修服务网点地址与客服电话 - 百达翡丽官方售后中心
  • AI之Tool:deep-research(AI 驱动+搜索引擎+网页抓取)的简介、安装和使用方法、案例应用之详细攻略
  • rust开发wasm与浏览器(js)交互
  • 一个3D集装箱可视化工具
  • 华为云网络ACL vs 安全组:3大核心差异与混合部署最佳实践
  • 从“寻找阴暗面”到技术写作:避免消极思维的 2 个结构化框架
  • 2026最新7款高性价比AI编程助手企业选型实测
  • Midjourney付费方案全解析,从个人创作者到AI设计工作室的5种最优配置路径
  • Codex+DeepSeek智能体实战:从CRI接口到自动化工作流搭建
  • CSS自定义属性实战:动态主题切换与组件化开发指南
  • AI资讯简报设计原理:信息筛子、邮件载体与可信验证
  • 多维聚合实战:超越GROUP BY的高维数据操作指南
  • Prerequisites不是检查清单,而是环境契约:三层可验证设计体系
  • NAU8224与STM32G070RB构建高保真音频系统
  • 多维聚合实战:从Pandas到xarray的OLAP分析方法论
  • 风箱说紫微斗数看感情:为什么不能只看夫妻宫?
  • 操作系统内存管理 4 种动态分区分配算法对比:首次适应 vs 最佳适应 vs 最坏适应 vs 邻近适应
  • 雅思词汇背了又忘?这个方法让你1小时记牢100个,手脑并用效率翻10倍
  • TypeScript+Node.js全栈AI应用开发:类型安全与工程化实践
  • Java开源OCR工具JiaJiaOCR:本地化部署与双模式识别实践
  • 企业级AI Agent项目实战:从单Agent到多Agent协作完整指南
  • 5分钟搞定Windows更新故障:终极修复工具完全指南
  • 舒缓刺痛干痒面膜哪家好:蜜妙诗即刻止痒 - MXyuyu
  • esp32-tcp
  • Qt QComboBox智能提示实现:仿Google搜索框的自动补全功能
  • 环保数采仪对接省厅平台:10大高频踩坑点与实战避坑指南
  • 2026最新6款AI编程工具平替之选深度实测
  • BurpSuite 2026.4.3 代理配置与证书安装:3步解决HTTPS流量拦截
  • 3步轻松安装:Chrome视频下载插件的完整使用指南
  • AI Agent工作流实战:从核心概念到猜数字游戏完整开发指南