doStuff 并返回布尔值是不好的做法吗?

Posted

技术标签:

【中文标题】doStuff 并返回布尔值是不好的做法吗?【英文标题】:Is it bad practice to doStuff and return a boolean? 【发布时间】:2015-10-29 18:58:29 【问题描述】:

在我现在正在学习的java课程中,如果键还没有值,我需要为键添加一个值,此外,如果键有值,他们还希望该方法返回true当键已经有值时被添加或为假。

HashMap<RegistrationPlate, String> register = new HashMap<RegistrationPlate, String>();
public boolean add(RegistrationPlate plate, String owner) 

    if (register.get(plate) == null) 
        register.put(plate, owner);
        return true;
    
    return false;

我认为有一个返回真值的“add”方法很奇怪,这应该是一个 void 方法吗?

【问题讨论】:

一点也不奇怪!这是确保您的方法成功运行的常见做法。这样,您可以执行result = add(x,x) 之类的操作,并在继续之前检查result。如果您假设它可以工作,那么以后可能会破坏更多代码。 我认为以任何方式使用void 都是非常糟糕的习惯。 void 没有任何意义,它没有贡献。退货很好,因为它免费提供信息。当您尝试返回void 时,请考虑一下您可以在返回值中提供什么样的信息。 完全没问题。例如 java createFile() 如果成功创建则返回 true 否则返回 false @HuStmpHrrr 使用void 也不错,在很多情况下你会使用void... @brso05 好吧,您不必在所有情况下都返回某些东西。但大多数时候,您确实可以返回一些有用的东西。在这种情况下,是的。另一个常见的例子是 setter 方法。为什么二传手应该返回void?例如,它应该返回实例本身,以便允许 instance.setF1(f1).setF2(f2).setF3(f3) 并且更简洁。还有很多其他的例子。 【参考方案1】:

我认为有一个返回真值的 'add' 方法很奇怪,这应该是一个 void 方法吗?

绝对很奇怪。不要将boolean 方法视为提出问题并返回是或否答案的一种方式。他们可以做得更多!

查看 Java 源代码,您会发现某些方法具有 boolean 返回类型是多么美妙。 想向对象添加一些东西吗?成功了吗?在多种情况下,boolean 返回类型对于类/对象/方法之间的通信是有利的。

查看 Java 的 ArrayList remove(Object) implementation 以获取提供额外信息的 boolean 返回类型的绝佳示例。

【讨论】:

【参考方案2】:

为加法之类的事情返回一个布尔值可能非常有用。事实上put 返回旧值,因为它有它的用途。

所以你不需要使用get - 或者更好的containsKey 但可以这样做:

public boolean add(RegistrationPlate plate, String owner) 
    String oldValue = register.put(plate, owner);
    return oldValue == null || !owner.equals(oldValue);

|| ... 有点过头了。

【讨论】:

【参考方案3】:

在 Java 的 util 类中,这些方法被广泛使用。

看看几乎每个人都知道的类 ArrayList:

在这个类中有一个方法叫做boolean add(T e), Java 中还有许多其他类也是这样工作的。

在我看来,这没问题,它使测试更容易。 (可以通过返回值检查方法是否成功)

【讨论】:

以上是关于doStuff 并返回布尔值是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章

从您的方法返回异常是不好的做法

Java 的布尔默认值是“真”吗? [复制]

训练7鸡是不是鸟?(instanceof表达式返回值是布尔值,可用于if条件判断)

使用 Null 来表示值是不好的做法吗?

强制转换为布尔值是检查是不是存在与键匹配的 unordered_map 值的有效方法吗? C++

Java布尔“意外的返回值”