【发布时间】:2015-09-21 06:44:49
【问题描述】:
我正在学习 Java,同时也在学习代码设计方面的书籍。
我想知道,在 Java 中是否有可能将 if 语句封装在方法调用中,如果 boolean 为假,则允许以某种方式退出父方法?
我想知道的是,如果我可以进一步提炼以下代码
public void addStock (String stock) {
boolean stockNameIsValid = testStringForValidStockName(stock);
if (stockNameIsValid == false){
JOptionPane.showMessageDialog(getParent(), "Invalid text entered. Stock ticker names may only include upper-case alphabetical letters.", "Invalid Text Entry Error", JOptionPane.ERROR_MESSAGE);
return;
}
boolean stockAlreadyExistsInPanel = testForStockExistenceInListingPanel(stock);
if(stockAlreadyExistsInPanel == true){
JOptionPane.showMessageDialog(getParent(), "The same stock cannot be entered twice into the list of stocks being watched.", "Redundant Stock Error", JOptionPane.ERROR_MESSAGE);
return;
}
controller.addStockToDb(stock);
}
变成类似
public void addStock(String stock){
giveErrorAndReturnIfStockNameInvalid(stock);
giveErrorAndReturnIfStockCannotBeFound(stock);
controller.addStockToDb(stock);
}
我想知道这样做是否可行,因为我的 IDE 无法进一步提取上面的代码,并且我认为按照上面的第二种方式塑造我的代码会更好地传达意图,并且比最初的例子。
我有这个想法是因为我目前正在阅读 Bob 叔叔的“清洁代码”一书,里面说方法最终应该尽可能短。如果我在方法调用中封装较低级别的逻辑,那么它会使代码反映较高级别的逻辑。这使得代码更容易理解,因为它需要更少的开发人员的脑力资源来获得代码各部分功能的一般概念。
我的目标是让读者不必实际分析此处代码的实现细节,除非绝对必要。因此,读者不必通读整个方法来理解它,而是可以获得我的代码逻辑的更抽象的表示。
【问题讨论】:
-
你可以抛出异常
-
永远不要将
boolean与true或false进行比较。if(x == true)应该总是写成if(x)。显式比较不仅丑陋而且容易出错 -if(x = true)也会编译(如果你能告诉我它的作用,5 分)。 -
@BoristheSpider 另一方面,也应该不鼓励使用
if(!x)。因为它不太可读,有时您的大脑会在复杂的应用程序中错过这一行中的point。如果我错了,请纠正我。 -
问自己以下问题:
addStock方法是否也应该负责显示错误消息? (请记住,您已经在尝试清理代码。 -
@TAsk 你会建议什么作为替代方案?
if(x == false)与 true 相比具有相同的问题,if(x != true)可能与if(!x)具有相同的问题,但相当丑陋。我想说,如果有人无法在if语句中发现!,那么他们可能不应该编程。
标签: java oop coding-style code-cleanup