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};