最近看了一些文章,说有副作用的方法不好。所以我只想问我这里的实现是否可以归类为有副作用。
假设我有一个SecurityGuard
which 检查他是否应该允许客户去俱乐部。
SecurityGuard
要么只有validNames 列表或invalidNames 列表,而不是两者。
- 如果
SecurityGuard
只有validNames,他只允许名字在列表中的客户。 - 如果
SecurityGuard
只有无效名称,他只允许名称不在列表中的客户。 - 如果
SecurityGuard
根本没有列表,他允许所有人。
因此,为了执行逻辑,在每个列表的设置器上,如果新列表具有值,我会重置另一个列表。
class SecurityGaurd {
private List<String> validNames = new ArrayList<>();
private List<String> invalidNames = new ArrayList<>();
public void setValidNames(List<String> newValidNames) {
this.validNames = new ArrayList<>(newValidNames);
// empty the invalidNames if newValidNames has values
if (!this.validNames.isEmpty()) {
this.invalidNames = new ArrayList<>();
}
}
public void setInvalidNames(List<String> newInvalidNames) {
this.invalidNames = new ArrayList<>(newInvalidNames);
// empty the validNames if newInvalidNames has values
if (!this.invalidNames.isEmpty()) {
this.validNames = new ArrayList<>(); //empty the validNames
}
}
public boolean allowCustomerToPass(String customerName) {
if (!validNames.isEmpty()) {
return validNames.contains(customerName);
}
return !invalidNames.contains(customerName);
}
}
所以在这里你可以看到 setter 方法有一个隐式操作,它重置了另一个列表。
问题是我在这里所做的可以被认为有副作用吗?是不是太糟糕了以至于我们不得不改变它?如果是,我该如何改进?
提前致谢。