gpt4 book ai didi

conventions - 当您在 if-else 链中提供每个可能的结果时,正确的格式是什么?

转载 作者:行者123 更新时间:2023-12-04 02:42:04 24 4
gpt4 key购买 nike

我是根据 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.
}

优点:

  1. 允许该方法的 future 查看者立即准确确定该方法的作用。

否定

  1. 有点“hacky”,几乎不干净。

示例 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. 不是很清楚该方法的作用。 (尽管可以通过适当的文档来避免这种情况)

否定

  1. 该方法的作用不是很明显。
  2. 至少对我来说,else 可能意味着唯一重要的比较是前 2 个。毕竟,else 意味着“其他一切”,这可能会产生误导和/或混淆。

这些方法做完全相同的事情。但是,我相信示例 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;
}

优点:

  1. 当“做某事”只是几行代码时(对某些人而言)更容易阅读。
  2. 删除技术上多余的“else”语句。

否定

  1. 在“做某事”是数百行代码的情况下,阅读起来要困难得多。
  2. 在 if 语句之外添加“do something 3”乍一看表明该行将始终运行,直到在前面的 if 语句中注意到 return 语句。

示例 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 ifelse 是多余的:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com