【前言】
作为一个程序猿,if - else的使用会贯穿我们的整个职业生涯,但是有句话说的好,成年人不做选择题,那我们应该如何避免选择题呢?
【Show me the fucking code!】
if(condition 1) {
分支流程1
} else if(condition 2) {
分支流程2
}
……
else {
分支流程n
}
【违反开放、封闭原则】: 新增一种判断时,会新增一个if-else分支
【函数表优化】
针对与上述原则,建议使用函数表结构:
typedef bool (*ProcessFuncPtr)(const ItemState& current, ItemState& next);
struct ActionProcess{
Action act;
ProcessNextFuncPtr processFunc;
}
ActionProcess actMap[] =
{
{FARMER_GO, ProcessFarmerGo},
{FARMER_GO_TAKE_WOLF, ProcessFarmerGoTakeWolf},
{FARMER_GO_TAKE_SHEEP, ProcessFarmerGoTakeSheep},
{FARMER_GO_VEGETABLE, ProcessFarmerGoVegetable},
{FARMER_BACK, ProcessFarmerBack},
{FARMER_BACK_TAKE_WOLF, ProcessFarmerBackTakeWolf},
{FARMER_BACK_TAKE_SHEEP, Proces