【发布时间】:2020-05-22 04:33:53
【问题描述】:
我对 Dart(Flutter) 中的 Brackets 有很多困惑。 哪个括号“()、{}、[]”用于什么?
【问题讨论】:
-
你读过Dart language tour吗?
-
是的。但仍不清楚。
-
() - 函数,[] - 数组,{} - 对象
标签: dart
我对 Dart(Flutter) 中的 Brackets 有很多困惑。 哪个括号“()、{}、[]”用于什么?
【问题讨论】:
标签: dart
()可以对表达式进行分组:
var x = (1 + 2) * 3;
或者可以为函数指定参数列表:
var getAnswer = () => 42;
int square(int x) => x * x;
或者可以指定function calls:
var answer = getAnswer();
var squared = square(4);
or 是某些关键字语法的一部分。这包括(但不限于)if、assert、for、while、switch、catch:
if (condition) {
...
}
assert(condition);
for (var item in collection) {
...
}
while (condition) {
...
}
switch (value) {
...
}
try {
...
} on Exception catch (e) {
...
}
[] 自己创建List literals:
var list = [1, 2, 3];
var emptyList = []; // Creates a List<dynamic>.
或者在对象上使用时,调用operator [],这通常会访问集合的元素:
var element = list[index];
var value = map[key];
或在参数列表中,指定optional positional parameters:
int function(int x, [int y, int z]) {
return x + y ?? 0 + z ?? 0;
}
function(1, 2);
或in dartdoc comments, creates linked references 到其他符号:
/// Creates a [Bar] from a [Foo].
Bar fooToBar(Foo foo) {
// ...
}
{} 可以创建代码块,将行组合在一起并限制变量范围。这包括(但不限于)函数体、类声明、if-else 块、try-catch 块、for 块、while 块、switch 块等。 :
class Class {
int member;
}
void doNothing() {}
void function(bool condition) {
{
int x = 'Hello world!';
print(x);
}
if (condition) {
int x = 42; // No name collision due to separate scopes.
print(x);
}
}
或单独创建Set或Map literals:
var set = {1, 2, 3};
var emptySet = <int>{};
var map = {'one': 1, 'two': 2, 'three': 3};
var emptyMap = {}; // Creates a Map<dynamic, dynamic>
或在参数列表中,指定optional named parameters:
int function(int x, {int y, int z}) {
return x + y ?? 0 + z ?? 0;
}
function(1, y: 2);
或创建枚举:
enum SomeEnumeration {
foo,
bar,
baz,
}
或在Strings 中用于消除插值表达式的歧义:
var foo = 'foo';
var foobar = '${foo}bar';
var s = '${function(1, 2)}';
<> 在函数或类声明中用作一对时会创建generics:
class GenericClass<T> {
T member;
}
T function<T>(T x) {
// ...
}
或在使用泛型时指定显式类型:
var map = <String, int>{};
【讨论】: