在Flutter / Dart中,示例有时显示粗箭头,有时不显示。以下是示例:
RaisedButton(
onPressed: () {
setState(() {
_myTxt = "Text Changed";
});
},
在其他地方看到的东西:
void main() => runApp(MyApp());
答案 0 :(得分:10)
粗箭头语法只是返回表达式的简写方式,类似于(){ return expression; }
。
根据{{3}}。
注意:在箭头(=>)和分号(;)之间只能出现一个表达式,而不是一个语句。例如,您不能在其中放置if语句,但是可以使用条件表达式
void main(){
final cls = TestClass();
cls.displayAnInt((){
//you can create statements here and then return a value
int num1 = 55;
int num2 = 1;
int sum = num1 + num2;
return sum;
});
cls.displayAnInt(() => 55 + 1); // simply return an int expression
}
class TestClass{
displayAnInt(makeIntFunc){
int intValue = makeIntFunc();
print('The int value is $intValue');
}
}
从上面的代码中,您可以看到当使用回调函数然后返回值时,可以执行多行语句,而胖箭头只是具有一个没有return关键字的表达式。
考虑您对不支持dart多行语句的粗箭头的回答。这是可以理解的,因为执行() => {somtheing}
意味着您正在返回地图,并且希望看到类似() => {'name':'John', 'age':25}
而不是() => { _myTxt = "Text Changed";_myTxt = "Never Mind"; }
的东西。
答案 1 :(得分:2)
=>
用于返回匿名函数的值。
() {}
使您可以执行多个语句。
同时
() => {myVar}
或() => myVar;
允许一个单个语句。
() => myVar;
在返回一条语句时简短而简单。
创建非匿名函数的逻辑也相同。
单条语句功能
func() => y = x + x;
多条语句功能
func () {
x = x + x;
print(x + ' value of x');
};
答案 2 :(得分:1)
我发现这个意思完全相同。唯一的区别是,如果只有一条语句,则可以使用(不必)粗箭头。以下是上面带有粗箭头的RaisedButton
声明。注意,我必须删除两个花括号和一个分号:
RaisedButton(
onPressed: () {
setState(() =>
_myTxt = "Text Changed"
);
},
如果您习惯于使用其他语言,这些语言允许您在粗箭头后放置多个语句,则会发现您无法使用飞镖,如果尝试,则会出现以下错误:
这不起作用
RaisedButton(
onPressed: () {
setState(() => {
_myTxt = "Text Changed";
_myTxt = "Never Mind";
});
},
答案 3 :(得分:0)
它们都用于表达匿名功能。粗箭头用于返回单行,大括号用于返回代码块。
试图返回代码块的粗箭头无法编译。
答案 4 :(得分:0)
=>简写表达式用于在函数中定义单个表达式。足够的定义和属性。
下面两者都是相同的函数,并且将返回相同的值。只是语法不同
这是==类型
var size = (int s) => s*2;
这是return
类型
var size = (int s) {
return s*2;
}
通过一个真实的代码示例来理解这一概念。我们将考虑与Dart函数教程中相同的示例。该代码执行矩形的周长和面积。这通常是在功能的帮助下完成的。
void main() {
findPerimeter(9, 6);
var rectArea = findArea(10, 6);
print('The area is $rectArea');
}
void findPerimeter(int length, int breadth) {
var perimeter = 2 * (length * breadth);
print('The perimeter is $perimeter');
}
int findArea(int length, int breadth) {
return length * breadth;
}
给定的功能可以借助Dart中的胖箭头进行优化。
void main() {
findPerimeter(9, 6);
var rectArea = findArea(10, 6);
print('The area is $rectArea');
}
void findPerimeter(int length, int breadth) =>
print('The perimeter is ${2 * (length * breadth)}');
int findArea(int length, int breadth) =>
length * breadth;
点击运行按钮后,我们仍然得到相同的结果。
The perimeter is 108
The area is 60
来自:https://flutterrdart.com/dart-fat-arrow-or-short-hand-syntax-tutorial/
答案 5 :(得分:0)
至少在Dart 2.10版中似乎有一个区别:
如果要执行的表达式是Future,则执行顺序不相同。
=>
new Future(() => print('future #1 of 2'))
.then((_) => new Future(() => print('future #1a (a new future)')))
.then((_) => print('future #1b'));
new Future(() => print('future #2 of 2'))
.then((_) => new Future(() => print('future #2a (aa new futue)' )))
.then((_) => print('future #2b'));
结果是:
future #1 of 2
future #2 of 2
future #1a (a new future)
future #1b
future #2a (aa new futue)
future #2b`
{}:
new Future(() => print('future #1 of 2'))
.then((_) => new Future(() => print('future #1a (a new future)')))
.then((_) => print('future #1b'));
new Future(() => print('future #2 of 2'))
.then((_) { new Future(() => print('future #2a (aa new futue)' )); })
.then((_) => print('future #2b'));
结果是
future #1 of 2
future #2 of 2
future #2b
future #1a (a new future)
future #1b
future #2a (a new futue)