可有人喜欢三目运算符"?:",小弟有一问题想向众高手请教,请进!
大家在处理以下事情的时候会怎么做呢?
是简单地像我一样写一个层次分明的逻辑,还是用三目运算符去减少代码字数呢?
像我这样使用三目运算符来处理这个逻辑到底对不对呢?是不是吃力不讨好呢?
不过有一点可以肯定,第二个版本读起来让人费劲.
大家一般在什么情况下才使用三目运算符,使用它是可以使逻辑减化,还是能让程序效率提高,还是吃力不讨好?
说实话,我不喜欢让自己的程序看起十分冗余,总有一种简化的冲动,但又不确定这对不对,想听听前辈们的意见.
当然我更希望大家有更好的算法处理我的问题,使之代码简化,贴出代码者重分酬谢.
以下是我从自己的一个DX小程序进抽出一个控制sprite行走函数,但请指点.
参数 1,2,3,0对应sprite在位图中动作帧的相对位置.
//简单版
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
switch(nChar)
{
case VK_ESCAPE:
this->PostMessage(WM_CLOSE);//按ESC键退出程序
break;
case VK_RIGHT://总觉得下面代码有重复的MoveSprite看着惹眼.
this->MoveSprite(3);//动画人物向右走
break;
case VK_LEFT:
this->MoveSprite(1);//左走
break;
case VK_UP:
this->MoveSprite(2);//上走
break;
case VK_DOWN:
this->MoveSprite(0);//下走
}
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
//使用三目运算符来组合逻辑版
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
switch(nChar)
{
case VK_ESCAPE:
this->PostMessage(WM_CLOSE);
break;
case VK_RIGHT:
case VK_LEFT:
case VK_UP:
case VK_DOWN://如果按上下左右键,就会让MoveSprite函数得到0,1,2,3参数
this->MoveSprite((nChar==VK_UP || nChar==VK_DOWN)>(nChar==VK_LEFT || nChar==VK_RIGHT)?0x28-nChar:(nChar==VK_LEFT?1:3));
}
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}