可有人喜欢三目运算符"?:",小弟有一问题想向众高手请教,请进!

softworms 2004-01-06 11:36:37
大家在处理以下事情的时候会怎么做呢?

是简单地像我一样写一个层次分明的逻辑,还是用三目运算符去减少代码字数呢?

像我这样使用三目运算符来处理这个逻辑到底对不对呢?是不是吃力不讨好呢?

不过有一点可以肯定,第二个版本读起来让人费劲.

大家一般在什么情况下才使用三目运算符,使用它是可以使逻辑减化,还是能让程序效率提高,还是吃力不讨好?

说实话,我不喜欢让自己的程序看起十分冗余,总有一种简化的冲动,但又不确定这对不对,想听听前辈们的意见.

当然我更希望大家有更好的算法处理我的问题,使之代码简化,贴出代码者重分酬谢.

以下是我从自己的一个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);
}
...全文
407 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
softworms 2004-01-07
  • 打赏
  • 举报
回复
看来小弟力气做错了方向,学习,学习.
Ah 2004-01-06
  • 打赏
  • 举报
回复
我一般都这样用
BOOL bOkay = TRUE;

int i = bOkay?1:2;

其它的地方不用
Ah 2004-01-06
  • 打赏
  • 举报
回复
这样用是不是有点牵强?
ross33123 2004-01-06
  • 打赏
  • 举报
回复
kaka

再加一个右括号
ross33123 2004-01-06
  • 打赏
  • 举报
回复
个人倾向于少用......

不过你的代码有故意丑化三目运算符的嫌疑哦

this->MoveSprite((nChar==VK_UP || nChar==VK_DOWN)>(nChar==VK_LEFT || nChar==VK_RIGHT)?0x28-nChar:(nChar==VK_LEFT?1:3));
}

改为 this->MoveSprite(
nChar==VK_UP ? 2 :
(nChar==VK_DOWN ? 0 :
(nChar==VK_LEFT ? 1 : 3));
是不是要清晰得多呢?


zhucde 2004-01-06
  • 打赏
  • 举报
回复
一般碰到如下情况:
(a>b)?1:2;才会用三目运算符
其它的都会用第一种
vcforever 2004-01-06
  • 打赏
  • 举报
回复
一般选择第一种,根据具体情况,如果表达式很简洁的话用三目运算符还是比较好的,
如果像楼主那样内含稍复杂的表达式的话,本人更倾向第一种,如果用第二种代码杂乱,晦涩难懂!
个人意见:)
lygfqy 2004-01-06
  • 打赏
  • 举报
回复
第一种就很好
如果真的想要精简便于扩展的话
不妨把键相应消息都方到movesprite中去处理
feiniaoliang 2004-01-06
  • 打赏
  • 举报
回复
编程规范教育我通俗易懂最好~~~所以第一种~~~
victor_cui 2004-01-06
  • 打赏
  • 举报
回复
一般规范不建议使用三目运算符,晦涩难懂,并且不容易跟踪调试
Goodxstudio 2004-01-06
  • 打赏
  • 举报
回复
就个人而言,更倾向于第一种(//简单版)
第一种结构更加清晰,也利于以后功能的扩展

jackwuwei 2004-01-06
  • 打赏
  • 举报
回复
三目运算符,我只在高程考试中用过,又多不了几行代码,做的那么难懂,没那个必要啊
softworms 2004-01-06
  • 打赏
  • 举报
回复
up

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧