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

2015 年 8 月 19 日
 aprikyblue

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

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




13674 次点击
所在节点    程序员
104 条回复
special
2015 年 10 月 16 日
@init 很好!
mzer0
2015 年 10 月 20 日
@tchekai704 用 C++举一个例子. 例如, 一个 2D 游戏中的人物朝向可以被描述为一个集合
{up, left, right, down}
mzer0
2015 年 10 月 20 日
@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 日
@tchekai704 在 C++中, 还可以通过抽象类与函数容器来实现跳转表(map), 这是对 if-else 的进一步优化, 因为可以在抽象类中方便地设置日志记录器, 或者 bug 记录器, 这是游戏编程中非常有用的技术. 非算法类的代码中不应该出现多层嵌套 if-else, 也不应该出现连续的 if-else 和 switch, 因为这会把逻辑弄得很复杂, 相反, 应该"分治", 将逻辑分离.

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

https://v2ex.ih06.com/t/214336

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

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

© 2021 V2EX