代码重构 —— 区分代码和数据
2016-04-28 12:03
288 查看
string getMonthName(int month){ if (month == 1) return "January"; if (month == 2) return "February"; ... return "December"; }
有了经验和常识之后,大多数人都会避免写出这样的代码。因为与代码逻辑无关的数据应尽可能区分开来。(便于进一步的替换和维护)
const string monthNames[] = { "January", "February", ..., "December" }; // 这样还能继续精炼上述代码 string getMonthName(int month) { if (month <= 0 || month > sizeof(monthNames)/sizeof(monthNames[0])) { return null; } return monthNames[month+1]; }
这种表示能够表示代码的编写量,有助于避免错误。同样,想使用每个月包含的天数,可以用声明数组的方式:
const int daysIn[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
同样对于棋类游戏,棋子的移动问题,在编写棋子移动位置的算法,不如把棋子能够移动的相对坐标保存到数组,然后再利用循环比较的方式得到微移。
例如,马(knight)能够移动的相对坐标共有 8 种,声明一个数组并给这些坐标赋值:
const int knightDx[8] = {2, 2, -2, -2, 1, 1, -1, -1}; cosnt int knightDy[8] = {1, 1, -1, -1, 2, 2, -2, -2};
相关文章推荐
- php防止sql注入
- [转载]Python标准库:内置函数sum(iterable[, start])
- php学习记录 易混淆
- eclipse远程连接hbase错误
- 机器视觉开源代码集合
- 排列与组合C++实现
- homebrew升级PHP至5.6
- RxJava----操作符:组合操作符
- 关于C语言程序条件编译的简单使用方法
- 关于C语言程序条件编译的简单使用方法
- 关于C语言程序条件编译的简单使用方法
- python 基础
- C#学习之接口
- 【java】获取一年里某季、某月、某周的第一天及最后一天时间(日期工具类)
- Myeclipse10运行web程序时报java.lang.OutOfMemoryError: PermGen space时比较
- Java设计模式详解之门面模式(外观模式)
- python requests模块中返回时间elapsed解析
- php之array_column 的使用
- java短信接口
- php开启openssl的方法