在我的代码中我有
while (++num1begin >= 0 && isdigit(eq[num1begin]))
应增加num1begin,检查num1begin现在是否大于或等于零并检查其他条件。
这是不好的编码练习吗? (它确实在做我上面描述的吗?)
答案 0 :(得分:4)
应避免在您的情况下产生副作用的任何事情,因为它会强迫读取此代码的人几次检查有效性。
换句话说,它很容易出错并且难以调试。如果您在if
或while
之前或之内增加变量,它的工作方式相同,但更容易理解。
答案 1 :(得分:2)
while(++ num1begin> = 0&& isdigit(eq [num1begin]))
所有个人偏好 - 恕我直言都没有错。我个人喜欢简洁 - 并且在屏幕上获得额外的上下文行 - 比之前的++num1begin
更多......
对我来说,我本能地想要检查++num1begin >= 0
逻辑 - 这需要花费一点力气,但是必须要做的是增量是在同一行还是在一行之前。 &&
另一侧的评估和安全使用顺序不需要考虑/努力,但这会因读者而异。你应该总是考虑你的“观众”......如果其他程序员都是专业的C ++开发人员,他们应该对此很满意。如果他们不是,并且可能不得不停下来想知道短路评估和序列点,那么你可能想把它拆分出来。沉溺于代码维护者的最低共同点并不总是最好的......人们应该学习语言......但是不同的人群自然会遇到不同的代码库。
“我本能地想检查......” - num1begin
用于索引eq
,isdigit()
暗示是一个字符数组,所以我对此代码的关注包括:
num1begin
是否为签名类型(因此第一个条件可能为假),num1begin
的{{1}}不是代码试图避免搜索的实际哨兵值(给定-1的标记和类型的最负值是常见的),-1
在每次循环迭代时都会被测试,但可能只是第一次需要,num1begin >= 0
.... 对上述任何一项进行更正可能需要放弃当前的代码,但如果代码的功能正确且有效,那么我就可以了。