打破在一个情况下返回..和默认
我的OCD使我在编写case语句时添加“break”,即使它们不会被执行。 考虑下面的代码示例:
switch(option) { case 1: a = 1; b = 7; break; case 2: a = 2; b = 4; return (-1); break; default: a = -1; break; }
我的两个问题是:
对于“情况2:”,我并不需要rest,但无论如何,它是一个好主意吗? 对于“默认:”。 这是纯粹的强迫症,还是有真正的理由在这里rest?
你不需要rest,但是没有任何伤害。 在我看来,保持你的代码结构是值得有几个无关的陈述。
我同意在最终的违约情况下rest一下,不同意退休后的rest时间。 (一个同事做这些,这伤害了我的眼睛。)
我也缩进开关,以减less缩进级别的扩散。 :)即:
switch(option) { case 1: a = 1; b = 7; break; case 2: a = 2; b = 4; return -1; default: a = -1; break; }
(我也认为,因为return语句不是一个函数,所以强制使用看起来像一个多余的风格是不合适的)。
您的默认情况下的rest只是个人喜好的问题。
归来之后rest几乎似乎与我矛盾。 我会删除中断,只是为了使返回语句真正脱颖而出。
我会考虑在返回成为不良格式之后的中断,在某些编译器上您将得到关于不可到达代码的警告。
您的默认情况下的rest是完全适当的,案件通过是一种工具,应使用时特别标记。
在每种情况下,我都希望有一个rest时间,包括默认设置 ,避免在交换机内部进行返回。 对于只有2-3个情况的短路开关(包括默认), 返回是可以的,但只有在所有情况下都以同样的方式进行。 “毫无意义”的突破,我认为是毫无意义的,只是让更多的代码阅读。 空的默认值也是一样的,完全没有意义。 在我看来,轻松阅读代码更重要的是,如果有人碰巧改变这个或那个,会发生什么。
两个rest都没有为你做任何事情,但也没有伤害。
就个人而言,如果我有退货,我通常会把它们排除在外,但是如果可能的话,我也尽量避免在一个函数中有多个返回点。
但是,我认为在default:
情况下的中断是有好处的 – 原因之一是:如果您将其排除在外,并且有人在默认情况下添加了新的案例,那么如果他们“忘记”添加,行为将会有所不同rest。
正如其他人所指出的那样,在回归之后休假或者在违约情况下大多是个人风格的问题。
当我不必遵循任何特定的风格规则,我更喜欢这样的事情:
开关(FOO){ 情况0: baz = 1; 打破; 情况1: 酒吧%= 2; 返回-1; /* 还没到 */ 情况2: bar = -1; 返回-2; /* 还没到 */ 打破; 默认: 打破; }
在案例1和案例2之间,我倾向于倾向于2.即使评论说NOTREACHED,当代码改变时,评论可以说谎(当然是无意的)。 我喜欢NOTREACHED的评论,因为它可以满足皮特你知道你在做什么,并提醒你早日退出function。 如果回报被删除似乎有缺陷,那么在回归之后放置一个rest的理由将减轻错误。 无论您是否遇到下一个案例,或者您退出交换机并像以前一样继续操作,您仍然会得到虚假行为。
当然,如果我能避免它,我不会从交换机体内的函数返回。
我被告知,在C,C ++,Java和C#中,如果你不把这些“中断”,程序代码stream将落入其他“案件”,并将执行里面的指令,不pipevariablesdoesn没有赋予“案件”的价值。
对于其他人提出的意见,他们在默认情况下离开了rest处,以防某人稍后来到,并在其后面增加一个案子:在我工作的地方,编码标准总是把违约作为最后一个案例; 所以在我们的情况下,这种情况下的rest只是多余的。 (这是我完全同意公司的编码标准的一个案例,因为默认情况下总是最后一个,所以即使在长时间的交换语句中,您也总是知道在哪里可以find它)。
至于退货之后的中断,我倾向于省略中断,除非有任何不返回的执行path,因为我发现它是多余的。 (我的例外情况是,在极less数情况下,当一个案例中有多个执行path时,我不能快速扫描代码是否全部返回,那么我将把这个中断留给注意安全。)
我不亲自把这个rest时间,但是当别人决定把这个返回(-1)移到这个开关的外面,并忘记增加rest时,这可能会有所帮助。
我会放下来表明你不打算继续下一个案子。
在这个确切的例子中,对于这两个问题,这是个人偏好。 一般来说,规则是这样的:任何不中断的事情都会落空。 这意味着(就像波德所说的),如果他们不是最后一个,那么在违约情况下进行rest是个好主意。 这也意味着如果你的情况包含一个回报,那么下面的rest确实没有必要。
请原谅我有限的知识,但什么是强迫症?
除此之外,Brian Kernighan提供了一个关于何时(不)在switch
语句中使用break
的很好的解释 。