Java 多个返回语句,可读性

Java 多个返回语句,可读性,java,readability,Java,Readability,可能重复: 我的老师在我写的一些java代码上扣了分(我仍然得A,这只是我在java课程中获得的第一个非100%的分数),我不想就此与老师争论,但我想从实际的程序员那里得到一些建议。下面是一段令人不快的代码: private char byte2suit(byte val) { switch(val) { case 0: return 's'; case 1: return 'c'; case 2: return 'h';

可能重复:

我的老师在我写的一些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;”语句使用得更多?如果你不使用多个返回语句,你能给出一个真正令人信服的理由吗(如果上面的代码是可读的,并且是我的多个返回编码实践的最大限度,那么不可读的代码就不是理由)

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

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

您的代码很好,除了我要做的一个更改:使用
default

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

我可能会这样写,但有一个小小的区别:我会使用
default:
作为回退。我看不出有什么理由牺牲像在单返回神祭坛上那样可读的东西。更好的设计是使用
enum套装
我见过的典型代码标准(在我从事的工作中)声明,如果可读性得到增强,可以使用多于1个返回。考虑到函数的简单性,我认为这很好,只要您将fall back更改为默认值,正如现在编写的那样,您可以在切换之后但在返回之前使用其他代码;在这种情况下,我只希望看到1个返回。你的老师一定是20世纪60年代的难民,当时沃思和Djkstra命令一个方法应该有一个入口和一个出口,这是结构化编程运动的一部分,它扼杀了GOTO语句。告诉他大多数编译器(javap除外)无论如何都会将这种代码转换成这种规范形式,所以它在逻辑上必须是等价的。实际上,在“现实世界”中,总是使用多个返回语句。他没有必要为此给你打分。@EJP在发布了这个问题(并且看到它几乎完全是一个非常流行的问题的副本)后,我做了一些研究,发现在3种情况下,多个返回语句的推荐率是如此之高,其中“单返回”方式的代码要多得多。如果我有一些研究/记录的“可访问的”工作来证明这一点,我可以试着说服我的老师,否则我会得到“互联网并不总是正确”的回答