【问题标题】:Multiple return statements, readability [duplicate]多个返回语句,可读性[重复]
【发布时间】:2012-10-17 14:12:37
【问题描述】:

可能重复:
Should a function have only one return statement?

我的老师在我写的一些 java 代码上扣了分(我仍然得到 A,这只是我在 java 课程中获得的第一个非 100% 的成绩)我不打算与老师的观点,但我想从实际程序员那里得到一些建议。这是有问题的代码:

private char byte2suit(byte val) {
    switch(val) {
        case 0: return 's';
        case 1: return 'c';
        case 2: return 'h';
        case 3: return 'd';
        }
    //fallback value
    return 'h';
    }

在我看来,这比初始化返回值、在 case 中分配(并添加 break; 每行)然后返回值要清楚得多。当然,在其他人看到的代码中,我的观点并不是很强大,所以我想知道你们对 java(或 C/C++)中的多个 return 语句的看法,如果你确实使用多个 return 语句你是否比“if (this) return a; else return b;”更多地使用它?陈述?如果不使用多返回语句,能否给出一个真正令人信服的理由(如果上面的代码可读,不可读的代码不是理由,是我多返回编码实践的最大程度)

【问题讨论】:

  • 我可能会这样写,但有一点不同:我会使用default: 作为后备。我认为没有理由牺牲像单归之神的祭坛上那样可读的东西。
  • 更好的设计是使用enum Suit
  • 我见过的典型代码标准(在我工作过的工作中)表明,如果可读性得到增强,可以使用超过 1 个返回值。鉴于该函数的简单性,我认为这很好,只要您将回退更改为默认值,正如现在所写的那样,您可以在切换之后但之前有其他代码返回;在这种情况下,我只想看到 1 个回报。
  • 你的老师必须是 1960 年代的难民,当时 Wirth 和 Djkstra 规定一种方法应该有一个入口和一个出口,作为扼杀 GOTO 语句的结构化编程运动的一部分。告诉他大多数编译器(javap 除外)无论如何都会将这种代码翻译成规范形式,所以它必须在逻辑上是等价的。实际上,在“现实世界”中,一直使用多个返回语句。他没有资格为此标记你。
  • @EJP 在发布此问题后(并看到它几乎与一个非常受欢迎的问题完全相同)我做了一些研究,发现在 3 个案例中绝大多数情况下推荐使用多个返回语句代码以“单次返回”方式进行。如果我有一些研究/记录的“可引用”工作来证明这一点,我可以尝试说服我的老师,否则我会得到“互联网并不总是正确”的回应

标签: java readability


【解决方案1】:

一些学者认为,函数末尾应该只有一个 return 语句。他们认为,多个 return 语句在某种程度上使代码不纯。

但是,大多数语言设计师和专业程序员不同意这种纯粹的观点。如果您的方法又长又复杂,则多个返回语句可能会令人困惑(但如果是这种情况,那么您会遇到比多个返回语句更大的问题)。但通常多个 return 语句可以使代码更具可读性。

您的代码很好,除了我要进行的一项更改:使用default

switch(val) {
    case 0: return 's';
    case 1: return 'c';
    case 2: return 'h';
    case 3: return 'd';
    default: return 'h';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2012-12-20
    相关资源
    最近更新 更多