去掉if else 让代码干净起来!

xinxing130 2011-11-30 09:11:54
有很多人包阔我在前台总会出现大批的if else判断自己看的很脏
各种场景都有如:举例子
用户场景
if(如果用户帐号密码正确)
{
//就判定用户是否锁定
if(如果用户没被锁定)
{
if(如果用户今天是第一次登陆)
{
//...就给用户送5个积分
}
}
else
{
//...失败提示信息
}
}
else
{
//...失败提示信息
}
---------订单场景------
if(如果定单未支付)
{
1:支付确认按钮设置可用
2:发货按钮设置不可用
3:到货确认按钮设置不可用
}
else if(如果定单已经支付)
{
1:支付确认按钮设置不可用
2:发货按钮设置可用
3:到货确认按钮设置不可用
}
else if(如果定单已发货)
{
1:支付确认按钮设置不可用
2:发货按钮设置不可用
3:到货确认按钮设置可用
}

我这里写了2个场景 有时候逻辑复杂点if else 把自己否搞晕了!请教大牛们你们是如何设计 最好提供相关代码学习下
谢谢!
...全文
1011 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
w74839520 2011-12-11
  • 打赏
  • 举报
回复
有没有大神啊。。。我也需要学习·····
sohos_jo 2011-12-03
  • 打赏
  • 举报
回复
ASP.NET我不太懂,你可以试试将每个判断做成函数,根据返回值的组合来判断下一步怎么处理。
wquanchao 2011-12-03
  • 打赏
  • 举报
回复
if else很脏嘛,何必强求
  • 打赏
  • 举报
回复
3楼的方法不一定好,最理想的是一个函数里只有一个return语句。分支多了,增加程序复杂度。
lvyichang 2011-12-02
  • 打赏
  • 举报
回复
switch 和 if 有什么两样???
差不多哦!
追风筝的孩子 2011-12-02
  • 打赏
  • 举报
回复
if(楼主给我一半的分){
楼主将会长命百岁,生活幸福美满
}else{
楼主只是长命百岁
}
用户 昵称 2011-12-02
  • 打赏
  • 举报
回复
用看起来最简单的方法来写程序。
酷儿 2011-12-01
  • 打赏
  • 举报
回复
向sp123学习
ms 2011-12-01
  • 打赏
  • 举报
回复
先整理好优先级,然后再看看哪些能合并判断。
登山绵羊 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 sp1234 的回复:]

其实你的代码以及你叙述的逻辑,看不出分层深入的设计概念。这可能是你只能看到那些设计的原因。那么就以你的这个没有什么设计的简单例子:

比如说判断某个按钮可用,简单定义绑定表达式就行了,何必编写程序?
比如给用户送5个积分,通常完全可以不打破原来的代码而仅仅在事件或者回调的某个地方多注册一个事件处理过程。

总之,处理这些扩展的东西完全可以事先设计好,也就是说层次比较高。比如说如何将功能……
[/Quote]

重要之前的分析和设计,
xingxingbanyue 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liuqian4243 的回复:]
如果if中只一句话,而且else中也一句话,

那就使用三元运算符 ? :

完成功能
[/Quote]

++
YnSky 2011-12-01
  • 打赏
  • 举报
回复
switch()
case
evangels 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icedmilk 的回复:]

用户场景
C# code
if(密码不正确){
//错误
return false;
}

if(用户被锁定){
// 错误
return false;
}

if(第一次登录){
// 送5个积分
}
return true;
[/Quote]

这个也不错,不用SWITCH可以用这个
yajun_snow 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangnan20100811 的回复:]
switch()
case
调整下结构,会看的更清楚点
[/Quote]
+++1
wquanchao 2011-12-01
  • 打赏
  • 举报
回复
代码追求简洁易懂
迷彩老A 2011-12-01
  • 打赏
  • 举报
回复
封装,继承,多态。。
xuStanly 2011-12-01
  • 打赏
  • 举报
回复
用事件来处理.像下面这两段,第一段是业务逻辑层,第二段的前台页面.

/// <summary>
/// 登录
/// </summary>
/// <param name="code">代理商工号</param>
/// <param name="pwd">密码明文</param>
/// <returns></returns>
public AgentInfo Login(string code, string pwd)
{
if (string.IsNullOrEmpty(code))
throw new Exception("代理商工号不能为空");
if (string.IsNullOrEmpty(pwd))
throw new Exception("密码不能为空");
AgentInfo agent = this.Get(code);
if (agent == null)
throw new Exception("没有这个代理商编号");
pwd = this.MD5(pwd.ToLower());
if (!agent.Password.Equals(pwd))
throw new Exception("密码错误");
//...
OnAfterLogin(new AgentEventArgs(agent));
return agent;
}



private void Logon(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(chk.Text))
{
ltl_note.Text = "验证码不能为空";
}
else if (chk.Text.ToLower() != Session[CheckCode.LoginCode].ToString().ToLower())
{
ltl_note.Text = "验证码不正确";
}
else
{
try
{
ags.AfterLogin += new AgentEventHandler(this.CheckLogin);
AgentInfo agent = ags.Login(uid.Text, pwd.Text);
Session[SessionName] = agent;
Response.Redirect("Main.aspx");
}
catch (Exception ex)
{
ltl_note.Text = ex.Message;
}
}
}
private void CheckLogin(object sender, AgentEventArgs e)
{
//试用代理商再判断是不是已经有本区域正式代理商了。
if (e.Agent.Status == AgentStatusDefine.试用)
{
List<AgentInfo> list = ags.List(e.Agent.Area);
if (list != null && list.Count > 0)
{
int count = list.Count(a => a.Status == AgentStatusDefine.正式);
if (count > 0)
{
throw new Exception("本地区已经有正式代理商,试用代理商不能再登);
}
}
}
}
laoyingisme 2011-11-30
  • 打赏
  • 举报
回复
我也喜欢用这个
[Quote=引用 3 楼 icedmilk 的回复:]
用户场景

C# code

if(密码不正确){
//错误
return false;
}

if(用户被锁定){
// 错误
return false;
}

if(第一次登录){
// 送5个积分
}
return true;
[/Quote]
hetengfei_ 2011-11-30
  • 打赏
  • 举报
回复
用个function 把它包住。

要是还不理想的和话,你就不要写代码了。改行吧!
yusongkun 2011-11-30
  • 打赏
  • 举报
回复
在某些情况下,3楼的方法还是不错的,特别在js里。

switch case可以使用在if else有3层或3层以上的

3元运算符非常不容易理解。

另外如果你使用的是js代码,那么可以试试这种方式,简单,但是唯一的缺点就是不容易懂,不过用多了,自然就熟悉了。

var a = true;
var i = 0; j = 0;
a && (i = 5);
a || (j = 5);
alert(i);
alert(j);
//上面的语句的意思就是
if(a){
i = 5;
}
if(!a){
j = 5;
}
//&& 和 || 可以结合使用。不过这样就不容易看懂了。
加载更多回复(17)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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