天天看點

意大利面條:面向過程的代碼模型

面向過程的代碼往往被人形容為意大利面條。先讓我們看看以下面向過程思路的代碼編寫。

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)

//負号非法

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

//沒有負号

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

//小數點非法

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

//精度非法

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

//整數的前導有0

//有負号,沒有貨币符号

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

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

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

//有貨币符号

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

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

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

//有貨币有負号

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

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

//有貨币無負号

System.Console.WriteLine("該資料格式{0}", format ? "正确" : "錯誤");

以上的代碼并沒有全部寫完,筆者已經感覺到頭暈腦漲了,不知道讀者看完以後感覺是否良好。如果你現在感覺還不錯,那請繼續把這個代碼完成。

面向過程的考慮,就是自上而下,逢山開路,遇水架橋,代碼中充滿了分支和判斷,非常典型的代碼就是最後你可以看到無數的“}”在那裡,令你頭暈至極。

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/805137

繼續閱讀