2650
备注:
|
2953
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 38: | 行号 38: |
}}}可以使用如下代码来代替{{{ | }}}可以使用如下代码来代替{{{#!cplusplus |
行号 58: | 行号 58: |
}}}上述switch结构总计有170个case,代码长达5035行。同样可以用数组来改造它{{{#! | }}}上述switch结构总计有170个case,代码长达5000行。同样可以用数组来改造它{{{#! |
行号 62: | 行号 62: |
* 注意代码统计质量,函数不可太长,方法不可太多,不可有太多子类,不可有太多父类 | * 注意代码统计质量,函数不可太长,方法不可太多,不可有太多子类,不可有太多父类。比如,IkeScriptMgr::CallResponse单个函数长达5000多行,一个类SimHuman有多达414个成员函数,IkeSceneContainer类的直接派生类(不包括间接继承的类)有100个,这些数字说明这些地方的设计很可能存在问题,需要考虑是否要重构。 |
some tips on writing c++ codes to avoid potential bugs:
先写注释再写代码,规范化的注释。按照doxygen的标准给类、函数、变量写注释。比如,类似这样的注释一点用处都没有:
1 //---------------------------------------------------------------------------- 2 // @ SimDoor::SimDoor() 3 // --------------------------------------------------------------------------- 4 // Constructor 5 //---------------------------------------------------------------------------- 6 SimDoor::SimDoor( const RSString& name )
再比如
比较好的写法应该类似这样:
对于函数的注释应该写在头文件的声明中,而不是定义中。- 避免重复代码,使用函数。
避免使用预编译
应该定义成
static const int kMaxFriends = 2;
并写在用到它的类中,而不是一个全局的常量。避免switch,用数据来简化代码。比如
可以使用如下代码来代替
再比如
上述switch结构总计有170个case,代码长达5000行。同样可以用数组来改造它
bool (*response[])(void) = {TimerSetHandler, TimerKillHandler, ...}; return responses[statement]();
数组里面可以是函数,也可以是仿函数对象。注意代码统计质量,函数不可太长,方法不可太多,不可有太多子类,不可有太多父类。比如,IkeScriptMgr::CallResponse单个函数长达5000多行,一个类SimHuman有多达414个成员函数,IkeSceneContainer类的直接派生类(不包括间接继承的类)有100个,这些数字说明这些地方的设计很可能存在问题,需要考虑是否要重构。
- 避免指针,避免数组,避免自己写常用的数据结构,用stl
- 避免用C++实现OO design,注意对象的owner
- 善用svn,大的修改应该建分支
- 速度至关重要时,用查表代替计算,避免浮点数,
- 注意Singleton模式的实现。