gpt4 book ai didi

flutter - 在模型类中重用setter

转载 作者:行者123 更新时间:2023-12-03 04:55:46 27 4
gpt4 key购买 nike

我有用于查询数据库的模型类。一切正常,没有问题。我现在正在尝试优化模型类中的代码。这是代码

class HumanFilter {
double age, maxAge, minAge, weight, minWeight, maxWeight, tall, minTall, maxTall, waist, minWaist, maxWaist;

set setMaxAge(String s) {
if (s != null) {
double parsed = double.tryParse(s) != null ? double.parse(s) : maxAge;
minAge = minAge != null && parsed != null
? parsed <= minAge && minAge != 0 ? parsed - 1 : minAge
: null;
maxAge = parsed;
age = parsed != null ? null : age;
} else {
maxAge = null;
}
}

set setMinAge(String s) {
if (s != null) {
double parsed = double.tryParse(s) != null ? double.parse(s) : minAge;
minAge = parsed;
maxAge = maxAge != null && parsed != null
? parsed >= maxAge ? parsed + 1 : maxAge
: null;
age = parsed != null ? null : age;
} else {
minAge = null;
}
}

set setAge(String s) {
if (s != null) {
double parsed = double.tryParse(s) != null ? double.parse(s) : age;
age = parsed != null ? parsed : age;
minAge = parsed != null ? null : minAge;
maxAge = parsed != null ? null : maxAge;
} else {
age = null;
}
}
// another setters for the rest of the parameters which are same as the code above
}

其余参数的 setter 与我为年龄提供的 setter 完全相同。例如,重量 setter 与年龄 setter 相同,但设置minWeight,maxWeight和weight而不是minAge,maxAge和age。与minTall和minAge等相同。

我想创建3个方法,这些方法将采用最小值,最大值和标称值,然后返回3个值的列表或映射图,然后可以在setter方法中分配它们,但随后我还注意到min和max setter 几乎相同,因此也许也可以重用。我只是找不到合适的方法来重用(简化)代码

最佳答案

分解此重复项的一种方法是提取类中的最小/最大/当前值:

class Interval {
double min;
double max;
double current;
}

这意味着除了 setMinAge + setMaxAge + ...,您只需在 Interval上使用其中之一:

class Interval {
double min;
double max;
double current;

set setMax(String s) {
if (s != null) {
var parsed = double.tryParse(s) != null ? double.parse(s) : max;
min = min != null && parsed != null
? parsed <= min && min != 0 ? parsed - 1 : min
: null;
max = parsed;
current = parsed != null ? null : current;
} else {
max = null;
}
}

// setMin
// setCurrent
}

关于flutter - 在模型类中重用setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60618589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com