遇到朋友提交的这种代码该怎么办

2015-08-19 16:55:27 +08:00
 aprikyblue

受朋友委托,然后跟另一个朋友一起开发的,
一起开发的这个,之前 2 年没联系,

结果 ........
看完我一句也不想说




12591 次点击
所在节点    程序员
104 条回复
special
2015-10-16 14:32:05 +08:00
@init 很好!
mzer0
2015-10-20 21:34:50 +08:00
@tchekai704 用 C++举一个例子. 例如, 一个 2D 游戏中的人物朝向可以被描述为一个集合
{up, left, right, down}
mzer0
2015-10-20 21:46:19 +08:00
@tchekai704 例如, 一个 2D 游戏中的人物朝向(towards)可以被描述为一个集合{up, left, right, down}, 常见的处理手法为:

if(up == towards) {}
else if(left == towards) {}
else if(right == towards) {}
else if(down == towards) {}
else {}

如果用结构体来优化:

class towards_handle {
enum {up, left, right, down} towards;
void handle(void) { /* do something */ }
};

每个角色都拥有一个 towards_handle 对象, 它的 towards 值必然为{up, left, right, down}其中之一.

towards_handle th;
th.towards = 1; // 1 means up
th.handle();

这样的过程就比 if-else 漂亮许多, 并且可以用派生类来做相应的优化.
mzer0
2015-10-20 21:53:43 +08:00
@tchekai704 在 C++中, 还可以通过抽象类与函数容器来实现跳转表(map), 这是对 if-else 的进一步优化, 因为可以在抽象类中方便地设置日志记录器, 或者 bug 记录器, 这是游戏编程中非常有用的技术. 非算法类的代码中不应该出现多层嵌套 if-else, 也不应该出现连续的 if-else 和 switch, 因为这会把逻辑弄得很复杂, 相反, 应该"分治", 将逻辑分离.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/214336

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX