将代码重构为只有 return 语句
Refactor code to only have only return statement
我正在尝试将此代码重构为只有一个 return 语句,但我似乎不知道如何重构。我正在搜索树中的特定节点。树中的每个节点都可以有 children。任何方向将不胜感激谢谢
private TreeNode getDefaultNode(List list, String supervisingGroupName){
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
return tempNode;
}
else {
TreeNode node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
return node;
}
}
}
return null;
}
你可以这样做:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
node = tempNode;
break;
}else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
您可以使用 break
关键字跳出 for 循环:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
node = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) node.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
break;
} else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
通过这种方式,您可以重构为单个 return 语句,尽管这对我来说似乎不再清楚。重构前你的代码没有任何问题。
我不会建议一个人 return;初始检查以查看名称是否匹配合理且清晰,最后的 null return 本身就很好。我会改变你的代码的一件事,通过消除 else
来降低其明显的复杂性 - 在 return 之后,没有必要将后面的内容放在 else 子句中,因为当然它会发生,如果和只有 return 没有发生。我还建议使用类型化列表,以便您可以使用 "for each" 循环而不是计数循环进行迭代:
private TreeNode getNodeByName(List<TreeNode> nodes, String name) {
for (TreeNode node: nodes) {
OSGroup group = (OSGroup) node.getNodeBusinessObject();
if (name.equals(group.getName())){
return node;
}
TreeNode child = getNodeByName(node.getChildren(), name);
if (child != null) {
return child;
}
}
return null;
}
你会看到我也做了很多重命名工作;我认为这些名称使代码更清晰。
我正在尝试将此代码重构为只有一个 return 语句,但我似乎不知道如何重构。我正在搜索树中的特定节点。树中的每个节点都可以有 children。任何方向将不胜感激谢谢
private TreeNode getDefaultNode(List list, String supervisingGroupName){
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
return tempNode;
}
else {
TreeNode node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
return node;
}
}
}
return null;
}
你可以这样做:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
TreeNode tempNode = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) tempNode.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
node = tempNode;
break;
}else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
您可以使用 break
关键字跳出 for 循环:
private TreeNode getDefaultNode(List list, String supervisingGroupName){
TreeNode node = null;
for (int i = 0; i < list.size(); i++){
node = (TreeNode) list.get(i);
OSGroup temp = (OSGroup) node.getNodeBusinessObject();
if (supervisingGroupName.equals(temp.getName())){
break;
} else {
node = getDefaultNode(tempNode.getChildren(), supervisingGroupName);
if (node != null){
break;
}
}
}
return node;
}
通过这种方式,您可以重构为单个 return 语句,尽管这对我来说似乎不再清楚。重构前你的代码没有任何问题。
我不会建议一个人 return;初始检查以查看名称是否匹配合理且清晰,最后的 null return 本身就很好。我会改变你的代码的一件事,通过消除 else
来降低其明显的复杂性 - 在 return 之后,没有必要将后面的内容放在 else 子句中,因为当然它会发生,如果和只有 return 没有发生。我还建议使用类型化列表,以便您可以使用 "for each" 循环而不是计数循环进行迭代:
private TreeNode getNodeByName(List<TreeNode> nodes, String name) {
for (TreeNode node: nodes) {
OSGroup group = (OSGroup) node.getNodeBusinessObject();
if (name.equals(group.getName())){
return node;
}
TreeNode child = getNodeByName(node.getChildren(), name);
if (child != null) {
return child;
}
}
return null;
}
你会看到我也做了很多重命名工作;我认为这些名称使代码更清晰。