您的位置:首页 > 编程语言

代码重构 —— 区分代码和数据

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};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: