了解Dart中的括号

zpqajqem  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(133)

我对** dart (扑击)中的括号有很多困惑。哪个括号**“(),{},[]”用于什么?

xwbd5t1u

xwbd5t1u1#

括号:()

  • 分组表达式:
var x = (1 + 2) * 3;

或者可以指定函数的参数列表:

var getAnswer = () => 42;

int square(int x) => x * x;
  • 或者可以指定函数调用(包括对可调用类上.call方法的调用):
var answer = getAnswer();
var squared = square(4);
  • Or是某些关键字语法的一部分,包括(但不限于)ifassertforwhileswitchcatch
if (condition) {
  ...
}

assert(condition);

for (var item in collection) {
  ...
}

while (condition) {
  ...
}

switch (value) {
  ...
}

try {
  ...
} on Exception catch (e) {
  ...
}
  • 在Dart 3中,指定record
var emptyRecord = ();
var singleField = (123,);
var namedFields = (123, foo: 456);

方括号:[]

  • 它本身创建List文本:
var list = [1, 2, 3];
var emptyList = []; // Creates a List<dynamic>.
  • 用于对象时,调用operator []operator []=,这两个函数通常分别访问或设置集合的元素:
var element = list[index];
var value = map[key];

list[index] = element;
map[key] = value;
  • 在参数列表中,指定可选的 * 位置 * 参数:
int function(int x, [int y, int z]) {
  return x + y ?? 0 + z ?? 0;
}

function(1, 2);
  • 在dartdoc注解中,创建对其它符号的链接引用:
/// 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) {
  {
    String x = 'Hello world!';
    print(x);
  }

  if (condition) {
    int x = 42; // No name collision due to separate scopes.
    print(x);
  }
}
  • 它本身可以创建SetMap文本:
var set = {1, 2, 3};
var emptySet = <int>{};

var map = {'one': 1, 'two': 2, 'three': 3};
var emptyMap = {}; // Creates a Map<dynamic, dynamic>
  • 在参数列表中,指定 named 参数:
int function(int x, {required int y, int? z}) {
  return x + y + z ?? 0;
}

function(1, y: 2);
  • 创建枚举:
enum SomeEnumeration {
  foo,
  bar,
  baz,
}
  • String中,s可用于消除插值表达式的歧义:
var foo = 'foo';
var foobar = '${foo}bar';

var s = '${function(1, 2)}';
  • 或在String中,s用于指定具有4个以上十六进制数字的Unicode码点:
var bullseye = '\u{1F3AF}'; // 🎯

尖括号:<>

  • 在函数或类声明中成对使用时,创建泛型:
class GenericClass<T> {
  T member;
}

T function<T>(T x) {
  // ...
}
  • 或在 * 使用 * 泛型时指定显式类型:
var map = <String, int>{};

请注意,上述内容不包括()[]{}<>RegExp模式中使用时的含义。正则表达式语法是它自己的语言,不是Dart特定的。

相关问题