为何要使用Dart中的Fat Arrow(=>)语法?
首先得澄清一个小误区:虽然=>和{}的字符数相同,但箭头函数真正的简洁性体现在省略冗余代码上。比如同样是实现一个加法函数:
用大括号的写法:
int add(int a, int b) { return a + b; }
用箭头函数的写法:
int add(int a, int b) => a + b;
这里直接省去了return关键字、换行和缩进,把函数的核心逻辑直接暴露出来,视觉上更紧凑,也减少了不必要的代码噪音。
至于为什么有人偏好箭头函数,主要有这几个原因:
单行逻辑场景下可读性更强:箭头函数天生就是为单行表达式设计的,它明确告诉阅读者“这个函数的唯一作用就是返回这个表达式的结果”,没有额外的分支、副作用操作,一眼就能get到函数的核心功能。比如类里的getter:
String get fullName => '$firstName $lastName';,比用大括号包裹return要直观得多。回调函数场景更清爽:在处理集合的
map、forEach或者异步回调时,箭头函数能让代码更简洁。比如:final doubled = numbers.map((num) => num * 2).toList();要是换成大括号写法,就得写成
numbers.map((num) { return num * 2; }).toList();,链式调用时会显得冗余拖沓。暗示纯函数性质:箭头函数只能包含单行表达式,无法插入赋值、打印等副作用操作,这相当于给其他开发者一个信号:“这是一个无副作用的纯函数”,能帮助快速理解代码的行为。
另外,关于网上说的“更优化”,其实Dart编译器对箭头函数和单行大括号函数的编译结果是完全一致的,不存在性能上的差异,所谓的“优化”指的是代码结构上的精简,让代码更易维护。
当然,箭头函数不是万能的——如果函数需要多行逻辑、分支判断或者副作用操作,大括号写法肯定是更合适的选择。最终用哪种写法,还是看团队规范和个人习惯,适合当前场景的就是最好的。
内容的提问来源于stack exchange,提问作者kmort

