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

来源:互联网 发布:有意思的网名知乎 编辑:程序博客网 时间: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 ? "正确" : "错误");

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

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

原创粉丝点击