意大利面条:面向过程的代码模型

面向过程的代码往往被人形容为意大利面条。先让我们看看以下面向过程思路的代码编写。

string s = "12.14";

bool format = true;

int precision = 2;

char symbol = '$';

if (s.LastIndexOf(symbol) > 0)

{

//货币符号非法

format = false;

}

else

{

if (s.LastIndexOf(symbol) < 1)

{

//没有货币符号

if (s.LastIndexOf('-') > 0)

{

//负号非法

format = false;

}

else

{

if (s.LastIndexOf('-') < 0)

{

//没有负号

if (s.IndexOf('.') != s.LastIndexOf('.') || s.LastIndexOf('.') == s.Length || s.LastIndexOf('.') == 0)

{

//小数点非法

format = false;

}

else

{

if (s.LastIndexOf('.') > -1 && s.Length - s.LastIndexOf('.') > precision + 1)

{

//精度非法

format = false;

}

else

{

if (s.Split('.')[0] != int.Parse(s.Split('.')[0]).ToString())

{

//整数的前导有0

format = false;

}

}

}

}

else

{

//有负号,没有货币符号

if (s.IndexOf('.') != s.LastIndexOf('.') || s.LastIndexOf('.') == s.Length || s.LastIndexOf('.') == 1)

{

//小数点非法

format = false;

}

else

{

if (s.LastIndexOf('.') > -1 && s.Length - s.LastIndexOf('.') > precision + 2)

{

//精度非法

format = false;

}

else

{

if (s.Split('.')[0].Remove(1, 1) != int.Parse(s.Split('.')[0].Remove(1, 1)).ToString())

{

//整数的前导有0

format = false;

}

}

}

}

}

}

else

{

//有货币符号

if (s.LastIndexOf('.') > 0)

{

//货币符号非法

format = false;

}

else

{

if (s.LastIndexOf('.') > 1)

{

//负号非法

format = false;

}

else

{

if (s.LastIndexOf('.') == 1)

{

//有货币有负号

if (s.IndexOf('.') != s.LastIndexOf('.') || s.LastIndexOf('.') == s.Length || s.LastIndexOf('.') == 2)

{

//小数点非法

format = false;

}

else

{

if (s.LastIndexOf('.') > -1 && s.Length - s.LastIndexOf('.') > precision + 3)

{

//精度非法

format = false;

}

else

{

if (s.Split('.')[0].Remove(1, 1) != int.Parse(s.Split('.')[0].Remove(1, 1)).ToString())

{

//整数的前导有0

format = false;

}

}

}

}

else

{

//有货币无负号

if (s.IndexOf('.') != s.LastIndexOf('.') || s.LastIndexOf('.') == s.Length || s.LastIndexOf('.') == 1)

{

//小数点非法

format = false;

}

else

{

if (s.LastIndexOf('.') > -1 && s.Length - s.LastIndexOf('.') > precision + 2)

{

//精度非法

format = false;

}

else

{

if (s.Split('.')[0].Remove(1, 1) != int.Parse(s.Split('.')[0].Remove(1, 1)).ToString())

{

//整数的前导有0

format = false;

}

}

}

}

}

}

}

}

System.Console.WriteLine("该数据格式{0}", format ? "正确" : "错误");

以上的代码并没有全部写完,笔者已经感觉到头晕脑涨了,不知道读者看完以后感觉是否良好。如果你现在感觉还不错,那请继续把这个代码完成。

面向过程的考虑,就是自上而下,逢山开路,遇水架桥,代码中充满了分支和判断,非常典型的代码就是最后你可以看到无数的“}”在那里,令你头晕至极。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值