You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中使用保留字作为变量、枚举常量名的命名规范是什么

Dart 保留字用作变量/常量名的命名约定

$enum写法的合规性判断

你写的$enum语法层面合法,但不符合官方生态通用命名约定:

  • Dart语法本身允许标识符以$开头,写了不会报编译错误,也不会触发默认的lint警告;
  • 但Dart官方Effective Dart风格指南明确不推荐手写业务代码用$作为标识符前缀。这类带$的命名是生态里代码生成工具(比如freezed、json_serializable)的预留命名空间,专门用来避免生成代码和用户手写代码撞名,手动在业务代码里用这类命名,一来不符合风格要求,二来后续如果给类加代码生成逻辑,很容易出现命名冲突,平白增加维护成本。

官方推荐的冲突处理方案

碰到标识符和Dart保留字撞名的场景,按下面的优先级选方案,完全符合规范,也没有副作用:

  • 第一选择:换一个语义完全等价、不碰保留字的同义词
    这是最推荐的做法。比如你这里的enum是指“枚举类型”的展示类型,直接替换成语义完全一致的enumeration就行,最终枚举定义如下,没有任何歧义,完全符合枚举值要求的小驼峰命名规则:
    enum DisplayType { string, enumeration, number }
    
  • 第二选择:给保留字加一个短的语义后缀
    如果找不到合适的同义词,就在保留字后面加个和场景匹配的短后缀就行,比如表示类型加Type、表示值加Value。这个场景里就可以命名为enumType,最终枚举写为:
    enum DisplayType { string, enumType, number }
    
    同样符合命名规范,读代码的人一眼就能懂含义。

补充说明

你提到的Dart枚举命名规则是对的:Dart默认lint规则要求枚举常量用lowerCamelCase小驼峰格式,全大写下划线分隔的SCREAMING_CAPS风格只适用于历史遗留的顶层编译时常量场景,用在枚举值上一定会触发风格警告。
如果是序列化场景必须匹配名叫enum的外部字段(比如接口返回的JSON key),也不要硬用保留字或者$前缀命名,正常用非冲突的名字,通过序列化注解指定映射的原始key就可以解决问题。


内容的提问来源于stack exchange,提问作者Dusan Milosevic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:24:24