Dart中get/set属性的正确语法是什么?有什么易记的规则吗?
Dart getter/setter 语法规则与记忆技巧
标准语法
Dart 中实例属性的 getter、setter 固定写法如下:
getter(只读属性访问逻辑)
// 单行写法 返回值类型 get 属性名 => 取值逻辑; // 示例 int get val => _val; // 多行写法(可加入额外校验、计算逻辑) int get val { if (_val < 0) return 0; return _val; }
setter(可写属性赋值逻辑)
// 单行写法 set 属性名(参数类型 入参名) => 赋值逻辑; // 示例 set val(int v) => _val = v; // 多行写法 set val(int v) { if (v >= 0) _val = v; }
快速记忆法则
- 关键字位置:
get/set是访问逻辑的标记,永远放在返回值类型之后,属性名之前,不要把get/set写在整行最开头。 - getter 无参数、要返回值:getter 模拟普通属性的读取行为,调用时不需要加括号,因此定义时不需要写参数括号,必须标注返回值类型。
- setter 无返回值、要单参数:setter 模拟普通属性的赋值行为,调用时是赋值语句无返回值,因此定义时不需要写返回值类型,只需要传1个赋值用的入参即可。
- 类比普通方法记:普通方法结构是
返回值 方法名(参数列表),getter 相当于把方法名替换为get 属性名、去掉参数列表;setter 相当于去掉返回值、把方法名替换为set 属性名、仅保留1个赋值参数。
常见写法错误说明
你尝试的几种写法问题分别对应:
get int val => _val;:get关键字位置错误,应该放在返回值int之后int val get => _val:属性名val位置错误,应该放在get之后,且语句末尾缺分号val set(v) => _val = v;:set关键字位置错误,应该放在属性名val之前,且缺少入参类型标注
内容的提问来源于stack exchange,提问作者Gazihan Alankus
相关产品推荐
相关产品推荐

