意大利面条:面向过程的代码模型
来源:互联网 发布:有意思的网名知乎 编辑:程序博客网 时间:2024/04/27 21:44
面向过程的代码往往被人形容为意大利面条。先让我们看看以下面向过程思路的代码编写。
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 ? "正确" : "错误");
以上的代码并没有全部写完,笔者已经感觉到头晕脑涨了,不知道读者看完以后感觉是否良好。如果你现在感觉还不错,那请继续把这个代码完成。
面向过程的考虑,就是自上而下,逢山开路,遇水架桥,代码中充满了分支和判断,非常典型的代码就是最后你可以看到无数的“}”在那里,令你头晕至极。
- 意大利面条:面向过程的代码模型
- 《SQL反模式之“意大利面条式查询”》
- 吃面条的礼节
- 面条的思考
- 一碗热腾腾的面条
- 面向过程、面向对象 的模型和方法
- 005:面向过程的代码 vs 面向对象的代码
- 006:面向过程的代码 vs 面向对象的代码
- 层层清晰:面向对象的代码模型
- 面条代码 vs. 馄沌代码
- 面向过程的.NET(一工作代码)
- JavaScript面向对象代码的变迁过程
- 人生的第一次做面条
- 面条的十种做法
- 永远盛开的面条花
- 自制一碗有内涵的面条
- 面向过程的代码符合大众的思维方式吗?
- 伟大的意大利的左后卫
- 为Windows2008服务器安装.NET Framework 3.0
- 对象定义的秘诀
- 中文:一个面向对象的自然语言
- 类是数据类型,对象是内存的具体分配
- 层层清晰:面向对象的代码模型
- 意大利面条:面向过程的代码模型
- Stack和Queue:后进先出和先进先出
- StringBuilder:字符串构建
- String:本质上是字符数组
- Math:处理数学计算的工具
- Enum:枚举
- Random:随机值的处理:发牌游戏
- ArrayList:可变数组
- Hashtable:仅有两列的表