在我的项目中,我有一个这样的代码(非常简化):
void main() async {
int times2({required int integer}) {
return integer*2;
}
final t1 = 0;
print(times2(integer: t1));
final t2 = 10;
print(times2(integer: t2));
final t3 = 25;
print(times2(integer: t3));
}
这就是这段代码的问题所在。这部分代码将来可能会更改。我可能要加上整数是15的情况。我可以:
void main() async {
int times2({required int integer}) {
return integer*2;
}
final t1 = 0;
print(times2(integer: t1));
final t2 = 10;
print(times2(integer: t2));
final t3 = 15;
print(times2(integer: t3));
final t4 = 25;
print(times2(integer: t4));
}
或
void main() async {
int times2({required int integer}) {
return integer*2;
}
final t1 = 0;
print(times2(integer: t1));
final t2 = 10;
print(times2(integer: t2));
final t2_1 = 15;
print(times2(integer: t2_1));
final t3 = 25;
print(times2(integer: t3));
}
在这两种情况下,它都可能导致混淆(因为命名。)
我找到了一个可以防止这种情况发生的方法。
void main() async {
int times2({required int integer}) {
return integer*2;
}
() {
final t = 0;
print(times2(integer: t));
}();
() {
final t = 1;
print(times2(integer: t));
}();
() {
final t = 2;
print(times2(integer: t));
}();
}
这样写感觉太不对了。我的问题是,"写这样的代码有问题吗?"或者"我们有更好的方法来实现这一点吗?">
额外的注意:我可以为这个简化的代码创建一个命名函数,但是实际的代码不能用命名函数来完成(这会使它更复杂)。
void newFunction({required int integer}) { // Don't want to create a function
print(times2(integer: integer));
}
如果你有重复的代码,你应该创建函数或循环
循环的例子:
int times2({required int integer}) {
return integer*2;
}
for(final t in <int>[1, 2, 3, 4, 5, 6]) {
print(times2(integer: t));
}
根据评论中的对话进行编辑
我是这样做单元测试的:
void main() {
void main() {
MyClassAdapter().registerForId(1);
group('Test serializing', () {
group('integers', () {
test('Uint8', () {
const data = 126;
final expected = [127, 255, 126];
expect(
binary.serialize(data),
equals(expected),
);
});
test('Int8', () {
const data = -14;
final expected = [127, 254, 242];
expect(
binary.serialize(data),
equals(expected),
);
});
...
}