【发布时间】:2012-10-17 14:12:37
【问题描述】:
我的老师在我写的一些 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