dart中箭头表达式与js中箭头表达式对比

简介: dart中箭头表达式与js中箭头表达式对比

dart中箭头表达式与js中箭头表达式对比

1、unexpected text ‘if’

  List<int> list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  list.forEach((num) => {
    if (num % 2 == 0) {
      
    }
  });

if这儿报错,报错提示是unexpected text ‘if’,如下图所示:

一提起箭头表达式,我们先想起的肯定是js,那我们看下js中箭头表达式的用法。

2、js中的箭头表达式

我们看下js中箭头表达式的定义:箭头函数表达式.

基础语法如下:

(参数1, 参数2, …, 参数N) => { 函数声明 }

//相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
(参数1, 参数2, …, 参数N) => 表达式(单一)

// 当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}

// 没有参数的函数应该写成一对圆括号。
() => {函数声明}

在js中执行下面代码,不会报错。

var list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
list.forEach((num) => {
    if (num % 2 == 0) {
        console.log('num:' + num);
    }
});

输出如下:

num:2
num:4
num:6
num:8
num:10

这说明js中的箭头表达式的方法体中是支持if语句的。

3、Dart中的箭头表达式

既然js中的箭头表达式中的方法体可以包含if语句,那么我们就在dart的文档中找关于箭头表达式的用法了。

我们看下dart官网的说明:Functions,具体如下:

isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

对于只包含一个表达式的方法,你可以使用简写语法:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

这里的=> expr语法是对{ return expr; }的简写,=>符号有时可以当做箭头表达式

Note: 只有表达式——而不是声明——才能出现在 箭头(=>) 和 分号(;) 之间。比方说,你不能在这里使用if声明,但是你可以使用条件表达式。

好了,dart官网已经说的很清楚了,它里面的 => 并不等同于我们所说的箭头表达式,是有田间限制的。方法体只包含一个表达式时,可以使用箭头表达式方法进行简写。

好了,既然dart中的箭头表达式只支持单行表达式,那么我们这里是不能使用它了,那么我们去掉箭头,使用匿名方法即可,如下所示:

  List<int> list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  list.forEach((num) {
    if (num % 2 == 0) {
      print('num:$num');
    }
  });

输出如下:

num:2
num:4
num:6
num:8
num:10

4、结论

在使用Dart时,我们只需要记住一句话,方法体只包含一个表达式时,可以使用箭头表达式方法进行简写。这个跟语句加不加括号无关。

相关文章
|
8月前
|
JavaScript 前端开发
JavaScript中的短路表达式
JavaScript中的短路表达式
56 0
|
3月前
|
JavaScript 前端开发
js轮播图有左右箭头和小点
js轮播图有左右箭头和小点
39 1
|
3月前
|
JavaScript
js---三元表达式详解
js---三元表达式详解
123 0
|
5月前
|
JavaScript 前端开发
JavaScript基础&实战 JS中正则表达式的使用
这篇文章介绍了JavaScript中正则表达式的使用,包括正则表达式的创建、匹配模式、字符串匹配、拆分、搜索、匹配和替换等方法,并通过示例代码展示了如何应用这些技术。
JavaScript基础&实战 JS中正则表达式的使用
|
5月前
|
JSON Dart 前端开发
分享15 个 JavaScript 代码示例及其 Dart 对应代码。
本文对比了React/React Native中的JavaScript语法与Flutter中的Dart语法,帮助开发者快速上手Flutter。内容涵盖JSON处理、数组操作、类型转换、条件判断等常见功能,如`JSON.stringify`与`JsonEncoder().convert`,`array.push`与`list.add`,`parseInt`与`int.parse`等,并提供了15个JavaScript与Dart代码示例对照。这对于从JavaScript转向Dart的开发者尤其有用。
34 0
|
6月前
|
JSON Dart 前端开发
JavaScript代码及其 Dart 对应代码
15 个 JavaScript 代码示例及其 Dart 对应代码
47 3
|
6月前
|
JSON Dart 前端开发
JavaScript 代码示例及 Dart 对应代码
JavaScript 代码示例及 Dart 对应代码
60 5
|
5月前
|
JavaScript 前端开发
在js中正则表达式验证小时分钟,将输入的字符串转换为对应的小时和分钟
这篇文章介绍了如何在JavaScript中使用正则表达式来验证时间字符串的格式(小时和分钟),并提供了将时间字符串转换为JavaScript Date对象的示例代码及其测试结果。
|
5月前
|
JavaScript 前端开发 API
vue中将验证表单输入框的方法写在一个js文件中(表达式验证邮箱、身份证、号码、两次输入的密码是否一致)
这篇文章介绍了如何在Vue框架中将表单输入验证逻辑封装到一个JavaScript文件中,并通过正则表达式验证邮箱、身份证、手机号等信息,同时确保两次密码输入的一致性。
|
7月前
|
JSON Dart 前端开发
JavaScript 代码示例及其 Dart 对应代码
从React/React Native转向Flutter开发时,开发者常需查找Dart对等的JS语法。这里列举了15个转换示例,涉及JSON转换、数组操作、条件检查及转换方法。例如,JS的`JSON.stringify`在Dart中是`JsonEncoder().convert`,`array.push`对应`list.add`,`array.findIndex`在Dart中是`list.indexWhere`。Dart还提供了如`list.any`和`list.every`等类似JS的数组方法。虽然语法有别,但核心功能相似。
52 5