- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是根据 Java 提出这个问题的,但它也适用于遵循类似编译器模式的其他语言。
这适用于您提供所有可能结果的任何类型的方法,但我将使用 boolean
方法作为示例。我列出了两种对此方法进行编码的方法:
示例 1:
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
} else if (value1 < value2) {
//do something 2
return false;
} else if (value1 > value2) {
//do something 3
return false;
} //could also be in an "else" block.
return false; //impossible to reach, but necessary to compile.
}
优点:
否定
示例 2:
public boolean example2(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
} else if (value1 < value2) {
//do something 2
return false;
} else { //The same as (value1 > value2)
//do something 3
return false;
}
}
优点:
否定
这些方法做完全相同的事情。但是,我相信示例 1 比示例 2 更容易阅读,因为它明确说明了 if-else 链中的最后一个 if 语句。同时,由于找不到更好的词,示例 1 对我来说非常肮脏。
是否有正确的方法来做到这一点,还是只是个人喜好?
编辑: 我选择不包含一组 if 语句(不在 if-else 链中),因为我知道这不是一个好方法。如果有人不同意这一点并且有正当理由这样做,请在下面发帖,我会修改我的问题。
编辑 2: 之所以有这种观点,是因为如果“做某事”是 100 多行代码,没有 if-else 链会大大降低可读性。在简短的例子中,“做某事”只是 1 行或几行代码,那么是的,这可能是可行的。因此,我将其添加为下面的第三个示例(虽然我仍然认为它的可读性不是很好,但这是个人喜好。)
示例 3:
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
}
if (value1 < value2) {
//do something 2
return false;
}
//do something 3
return false;
}
优点:
否定
示例 4(也是我个人最喜欢的):
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
} else if (value1 < value2) {
//do something 2
} else if (value1 > value2) {
//do something 3
}
return value1 == value2;
}
这很棒,因为它首先处理“做某事”,然后将 return 语句限制在一个单独的、干净的、易于阅读的语句中,没有“hacky”的影响。
最佳答案
如您所述,这是一个偏好问题。第一个例子中的第三个if
是多余的,有些IDE甚至会发出警告。
就个人而言,我会选择第二种,因为我鄙视编写冗余代码,但这一切都归结为项目标准和个人喜好。
编辑:
实际上,如果我们谈论的是个人偏好,我会完全删除 else
- 如果您输入 if
block ,您只是 return
在函数之外,所以 else if
和 else
是多余的:
public boolean example1(final int value1, final int value2) {
if (value1 == value2) {
//do something 1
return true;
}
if (value1 < value2) {
//do something 2
return false;
}
//do something 3
return false;
}
关于conventions - 当您在 if-else 链中提供每个可能的结果时,正确的格式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365625/
来自函数和方法参数的 PEP 8 部分: Always use self for the first argument to instance methods. Always use cls for
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
如标题所述,驼峰式大小写(即:theQuickBrownFox)如何在其中一个单词以小写字母开头后跟大写字母(如 iPhone 中的情况)时工作。 getiPhoneNumber() 例如看起来很奇怪
我正在寻找线程安全函数的命名约定,这意味着可以从多个线程安全地调用函数。但假设我使用: void FooThreadSafe(); 在您看来,您是否认为: 此函数将使用锁定机制,并发调用是否安全? 或
我正在查看来自多个开发人员的具有多种命名约定的代码 - 一种真正的享受。其中包括匈牙利语(“s_year”、“s_day”)以及其他风格(“yearS”、“dayS”)。 有谁知道这种风格叫什么?对于
function getPerformActionFunction(someParameter) { return function() { performAction(som
我正在做一个项目,遇到了以下命名问题。 我想实现工厂模式,但我不知道要使用的最佳类命名(我正在从一个更改为另一个,这非常耗时:S)。 我通常使用命名空间来分隔类组,但我的问题在于这段特定的代码: cl
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 6年前关闭。 Improve t
我想知道是否有任何甜蜜的语言为“英尺”与“英寸”或“厘米”等提供某种抽象。我正在考虑在 Java 中执行以下操作: u(56).feet() + u(26).inches() 并且能够得到类似的东西
最近,我一直在阅读Code Complete,这是基于这里的许多引用以及一位 friend 的引用,并且对社区有一个命名问题。应该在确定事件是否成功的 bool 方法上使用前缀"is"吗?这是我尝试过
当项目的名称已经是复数时,你如何命名你的数组? array names 是有道理的。array collisionDatas 没那么多。 最佳答案 我几乎总是将它命名为Item name + s。命名
我正在查看代码并在函数和方法名称的开头看到 %。例如 defun %rod 和 defmethod %do-query。是否有使用这种命名方案的标准约定? 最佳答案 来自few places : %f
您对应用程序域模型类和表示层类使用的命名约定是什么?后缀/前缀来区分类的目标和第一眼: 例如,从 DAL 返回的有关人员的信息可以是 public class PersonEntity { pub
我正在为 Assemble v0.6.0 创建一个 nunjucks 插件.它似乎正在使用 Template (我认为它以前被称为 Engine ),它也支持 Verb . 我应该调用插件“engin
对于某些对象将存在于两个版本中的情况,我需要提出一个命名方案。假设服务器端有 File 和 Directory 对象,它将这些对象的轻量级版本传递给客户端。 LightweightFile 和 Lig
好的,因此您可以阅读有关标识符命名的准则,“直到您脸色发青…… Camel 案,帕斯卡案,使它们具有描述性……”但它们实际上并不能帮助您为给定名称选择最佳名称应用程序域。 最容易选择的(IMHO)是一
我见过“The Coolest Server Names”,我还见过另一个 smaller-ish question与我的有关,不幸的是,它已关闭。 不过,这是一个严肃的问题,因为我在一个内部应用程序
问题是关于命名变量或标识符的正确方法,这些标识符将两个或多个“事物”的集合分组。让我用例子和问题进一步解释一下...... 如果你拥有一个 id,你可以用标识符“id”来命名它 如果你有一个包含约会的
作为一名初学者/中级开发人员,我遇到了一个问题,因为我的项目越来越大,越来越抽象,因为我使用了更多的 OOP 原则,我在命名事物时遇到了问题。就像当我有多个项目或类库时,我不知道如何命名它们。我看到了
我正在实现一个新的Web服务,并且在我尚未使用CQRS的同时,我想创建我的服务,以便将来可以轻松地将其移至CQRS。因此,我想知道DTO类和方法的命名约定。 我已经阅读了有关DTO命名约定的blog
我是一名优秀的程序员,十分优秀!