繁体   English   中英

仅为了可读性而引入变量?

[英]Introducing variables only for readability?

仅为了便于readability而引入变量是一个好主意吗?

例1:

while(nameNode1.charAt(0) == nameNode2.charAt(0) && nameNode1.length() > 1 && nameNode2.length() > 1)
{
    nameNode1 = nameNode1.substring(1, nameNode1.length());
    nameNode2 = nameNode2.substring(1, nameNode2.length());
}

例2:

boolean letterFromBothNodesAreEqual_andNameHasMoreThanOneLetter = nameNode1.charAt(0) == nameNode2.charAt(0) && nameNode1.length() > 1 && nameNode2.length() > 1;

while(letterFromBothNodesAreEqual_andNameHasMoreThanOneLetter)
{
    nameNode1 = nameNode1.substring(1, nameNode1.length());
    nameNode2 = nameNode2.substring(1, nameNode2.length());
}

这可能是一个极端的例子,但我认为你明白了。

我没有在代码中看到这个,我想知道这是否是一个有用的方法?

谢谢

背景:我正在尝试从大学过渡到入门级开发人员,目前我专注于清洁编码。

尽管大多数干净的代码更容易维护,但是在使用代码可读的情况下总是更好,只是不要过多地执行维护噩梦。

我将在这里介绍两种新方法而不是变量,您的代码示例将是:

while(letterFromBothNodesAreEqual() && nameHasMoreThanOneLetter())
{
    nameNode1 = nameNode1.substring(1, nameNode1.length());
    nameNode2 = nameNode2.substring(1, nameNode2.length());
}

这是一个常见的可读性重构,可以通过名称将布尔条件提取到自己的函数中。 如果一个人正在阅读你的代码并遇到一些条件,那么他们会想知道它的意义是什么,为什么分支需要或代表什么。 单独的字段可能无法告诉他们答案,但如果条件具有名称(函数的名称),他们可能知道它代表什么。

除了你的例子中的变量名有点过于冗长之外,是的。

但重要的是要记住保持局部变量的范围尽可能小。 因此,如果它们仅在if块中进一步使用, if不要在方法的开头声明局部变量。

编辑 :还有一件我刚才注意到的事情:你的两个例子并不等同。 在第一个场景中,表达式在每次迭代时重新计算,而在第二个场景中则不重新计算。 在这种情况下,您需要一个辅助方法,如@NESPowerGlove所述,而不是变量。

是的,在程序中根据程序中的工作或功能命名变量是一个很好的做法。因为将来如果其他人在你的代码上工作,那么他会更容易理解,否则会让他头疼同样的事情发生在分布式程序上工作时,您的同事必须了解变量的名称。

这个问题非常主观,但以下内容适用于所有科目。 (我希望这个答案有点乐趣)

private boolean isMoreReadable = true;
private boolean isEasyToMaintain = true;
private boolean isProperlyCommented = true;
private boolean isBugFree = true;

// This method checks if my co-workers are happy with my code
private boolean myCoWorkersHappyWithMyCode() {
    return isMoreReadable && isEasyToMaintain && isProperlyCommented && isBugFree;
}

if (myCoWorkersHappyWithMyCode()) {
    System.out.println("YES, you wrote good code so I don't see why not");
} else {
    System.out.println("NO, keep learning to better yourself");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM