在飞镖构造函数中总结断言
Summerize assert in dart constructors
我在同一个 class 中有多个构造函数,它们有许多断言函数,这对所有构造函数都是相同的。
例如 class Foo 有 2 个构造函数:
Foo({...some params}):assert(conditionA),assert(conditionB),assert(conditionC);
Foo.fromForm({...some params}):assert(conditionA),assert(conditionB),assert(conditionC);
有什么方法可以将断言分组并共享给两个构造函数吗?
您可以通过让命名的构造函数调用未命名的构造函数来共享断言。
假设我这样定义 class Foo
:
class Foo {
final int? paramA;
final bool? paramB;
Foo({
this.paramA,
this.paramB,
}) : assert(
(paramA == null && paramB != null) ||
(paramA != null && paramB == null),
'You cannot use both paramA and paramB',
),
assert(
paramA == null || paramA > 0,
'When specified paramA must be superior to 0',
);
}
我在执行以下操作时可能会出现断言错误:
Foo(paramA: -1); // Assertion failed: "When specified paramA must be superior to 0"
Foo(paramA: 1, paramB: false); // Assertion failed: "You cannot use both paramA and paramB"
现在,如果我声明我的辅助构造函数如下:
class Foo {
// ...
Foo.fromForm(int param) : this(paramA: param);
}
当使用 this()
时,我定义我的 Foo.fromForm
构造函数将调用我的基未命名 Foo
构造函数并将受益于它的 assert
.
这也可以通过使用抽象 class:
abstract class BaseFoo {
BaseFoo({
required int? paramA,
required bool? paramB,
}) : assert(
(paramA == null && paramB != null) ||
(paramA != null && paramB == null),
'You cannot use both paramA and paramB',
),
assert(
paramA == null || paramA > 0,
'When specified paramA must be superior to 0',
);
}
class Foo extends BaseFoo {
final int? paramA;
final bool? paramB;
Foo({
this.paramA,
this.paramB,
}) : super(paramA: paramA, paramB: paramB);
// You can also call this()
Foo.fromForm(int param)
: paramA = param,
paramB = null,
super(paramA: param, paramB: null);
}
我在同一个 class 中有多个构造函数,它们有许多断言函数,这对所有构造函数都是相同的。 例如 class Foo 有 2 个构造函数:
Foo({...some params}):assert(conditionA),assert(conditionB),assert(conditionC);
Foo.fromForm({...some params}):assert(conditionA),assert(conditionB),assert(conditionC);
有什么方法可以将断言分组并共享给两个构造函数吗?
您可以通过让命名的构造函数调用未命名的构造函数来共享断言。
假设我这样定义 class Foo
:
class Foo {
final int? paramA;
final bool? paramB;
Foo({
this.paramA,
this.paramB,
}) : assert(
(paramA == null && paramB != null) ||
(paramA != null && paramB == null),
'You cannot use both paramA and paramB',
),
assert(
paramA == null || paramA > 0,
'When specified paramA must be superior to 0',
);
}
我在执行以下操作时可能会出现断言错误:
Foo(paramA: -1); // Assertion failed: "When specified paramA must be superior to 0"
Foo(paramA: 1, paramB: false); // Assertion failed: "You cannot use both paramA and paramB"
现在,如果我声明我的辅助构造函数如下:
class Foo {
// ...
Foo.fromForm(int param) : this(paramA: param);
}
当使用 this()
时,我定义我的 Foo.fromForm
构造函数将调用我的基未命名 Foo
构造函数并将受益于它的 assert
.
这也可以通过使用抽象 class:
abstract class BaseFoo {
BaseFoo({
required int? paramA,
required bool? paramB,
}) : assert(
(paramA == null && paramB != null) ||
(paramA != null && paramB == null),
'You cannot use both paramA and paramB',
),
assert(
paramA == null || paramA > 0,
'When specified paramA must be superior to 0',
);
}
class Foo extends BaseFoo {
final int? paramA;
final bool? paramB;
Foo({
this.paramA,
this.paramB,
}) : super(paramA: paramA, paramB: paramB);
// You can also call this()
Foo.fromForm(int param)
: paramA = param,
paramB = null,
super(paramA: param, paramB: null);
}