Java约定在实践中-从方法返回多个值
关于Java约定,我有两个问题。我试图利用罗伯特·C·马丁的“干净代码” 以下情况:Java约定在实践中-从方法返回多个值,java,naming-conventions,Java,Naming Conventions,关于Java约定,我有两个问题。我试图利用罗伯特·C·马丁的“干净代码” 以下情况: public void startProgressIfAllowed() { try { tryStartProgressIfAllowed(); } catch (Exception exception) { // log error } } private void tryStartProgressIfAllowed() { if (isSta
public void startProgressIfAllowed() {
try {
tryStartProgressIfAllowed();
} catch (Exception exception) {
// log error
}
}
private void tryStartProgressIfAllowed() {
if (isStartProgressAllowed()) {
stopProgressOnCurrentlyStartedTask();
startProgressOnThisTask();
}
}
private boolean isStartProgressAllowed() {
// Calls JOptionPane.showConfirmDialog with JOptionPane.YES_NO_OPTION.
// Created dialog contains checkbox indicating that saving currently started task is required.
// returns boolean depending on JOptionPane.YES_NO_OPTION clicked button
}
private void stopProgressOnCurrentlyStartedTask() {
// Saves currently started task depending on checkbox selecion property and stops currently started.
// What is the correct way to get checkbox selecion property?
}
提议的解决办法:
public void tryStartProgressIfAllowed() {
if (tryToStopProgressOnStartedTaskIfNecessary()) {
startProgressOnThisTask();
}
}
private boolean tryToStopProgressOnStartedTaskIfNecessary() {
// Calls JOptionPane.showConfirmDialog with JOptionPane.YES_NO_OPTION.
// Created dialog contains checkbox indicating that saving currently started task is required.
// Depending on checkbox selecion property saves task.
// returns boolean depending on JOptionPane.YES_NO_OPTION clicked button
}
以上问题有没有更好的解决方案?以下几点如何:
public void tryStartProgressOnThisTaskIfAllowed() {
tryStopTaskInProgressIfAllowed()
if (!isTaskInProgress()) {
tryStartProgressOnThisTask();
}
}
private void tryStopTaskInProgressIfAllowed() {
if (!isTaskInProgress()) {
return;
}
TaskInProgressResult result = whatToDoWithTaskInProgress();
if (result == Result.KEEP) {
return;
} else if (result == Result.DROP)
tryDropTaskInProgress();
} else if (result == Result.SAVE) {
trySaveTaskInProgress();
}
}
关于你的观点:
whatdowithtaskinprogress
和trhydroptakinprogress
是相同的抽象层次。如果你内联其中一个的代码,你当然是绝对正确的我们遇到的问题是,我们在UI中考虑是/否+复选框值。但在这里,从商业角度考虑要好得多。我确定了三种不同的结果:保留、保存、删除。如何获得答案对调用方法来说应该无关紧要。这似乎是CodeReview的问题,请参见页面左上角的下拉列表 在JavaSE中如何实现这种状态的一个示例:regex Matcher类
String s = ...
Pattern pattern = Pattern.compile("...");
Matcher m = pattern.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, ... m.group(1) ...);
}
m.appendTail(sb);
使用m.matches()
和m.lookingAt
作为替代电路
简而言之,状态是在处理类中保存的实际数据(此处为字符串)。真的吗
trytostopprogressandsavestartedtaskifsneedly()
是一个非常不专业的名字。我在大学时第一次听说Java约定使用长名字。我得说你做得太过分了!我会简单地称之为stopProgress
,并将故事的其余部分放在javadoc中。读得快多了。是的,我知道这是一个很长的名称,但根据“干净代码”的说法,描述性方法名称比短而不描述性(需要javadoc注释)要好得多,即使它太长。那么解决方案和列出的原则呢?问题不在于名称本身,而在于该方法做了很多事情。如果你觉得有必要在方法名称中包含“and”,那可能太多了。啊,我在某种程度上想念你的问题:对用户的质询可以有三种结果:保留、保存和删除。我正在相应地更新我的答案。