问一个程序优化的问题, if...else if...过多如何优化?
下面直接帖代码:
/********************************************************************
函数功能:蠕动泵状态控制函数
入口参数:无
返 回:无
备 注:m_State == 1 ,蠕动泵正转,m_State == 2,蠕动泵反转
sleeptime 为蠕动泵转动时间,m_tSpeed为转速
********************************************************************/
void PumpOperate()
{
if((m_State == 1) && (m_tSpeed == 1))
{
fSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 1))
{
rSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 2))
{
fSendData(2);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 2))
{
rSendData(2);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 3))
{
fSendData(3);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 3))
{
rSendData(3);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 4))
{
fSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 4))
{
rSendData(4);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 5))
{
fSendData(5);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 5))
{
rSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 6))
{
fSendData(6);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 6))
{
rSendData(6);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 7))
{
fSendData(7);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 7))
{
rSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 8))
{
fSendData(8);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 8))
{
rSendData(8);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 9))
{
fSendData(9);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 9))
{
rSendData(9);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 10))
{
fSendData(10);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 10))
{
rSendData(10);
Sleep(sleeptime);
ShutPump();}
else if .........
如下省略N(N > 100)组判断条件
这段程序是通过操控面板上面的按键的状态和一个静态文本框中由用户输入的速度参数值来作为判断条件,决定如何传递速度控制参数和转动时间,分别为 rSendData (),和Sleep()函数。由于实际应用时候整个速度参数有1到100,并有正反转情况,那么总共有200组参数,如果采用if else判断,当if else 过多时候,会出现嵌套过深的错误,向大家请教如何做优化!
[解决办法]
那就用switch结构啊
[解决办法]
fSendData(9);
Sleep(sleeptime);
ShutPump();}
重复的代码可以写成一个函数嘛,反复调用一个函数多爽.避免重复代码冗余
if过多就用switch吧,更清晰.
[解决办法]
第一种方法
if(m_State == 1 )
...switch
else
... switch
其实switch就是在做表 唯一方便就是添加代码 比较方便
还有一种就是做映射表 虽然也很好 但感觉添加起来 比较麻烦
建议第一种
如果非要第2种 可以考虑MFC消息映射的思路 比用两层结构 一层结构即可
[解决办法]
// switch比较简单。也可以用表驱动switch(m_tSpeed){ case 1: //... break; case 2 swicht(m_state)}// 而且看lz的代码,除了else if((m_State == 2) && (m_tSpeed == 1))这个条件外,其他的都是m_tSpeed等于多少,fSendData()的参数就是多少