zoukankan      html  css  js  c++  java
  • 意大利面条:面向过程的代码模型

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

    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 ? "正确" : "错误");

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

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

  • 相关阅读:
    2016.5.30实现透明Panel及控件置顶的方法
    2016.6.14自定义控件添加自定义事件
    2016.5.30让窗口处于最顶层的方法
    2016.5.23 用反射技术为实体类变量赋值、取值
    2016.4.6 WinForm显示PDF两种方法
    2016.3.7 Word2007编号设置
    2016.2.28 DataTable用法汇总
    2016.2.24 利用用户控件和委托完美解决快速选择txbbox
    2016.2.13 (年初六) oracle两张表update方法
    怎样用idhttpserver代替IIS让用户浏览html或下载文件 http://bbs.csdn.net/topics/360248674
  • 原文地址:https://www.cnblogs.com/shyleoking/p/1536602.html
Copyright © 2011-2022 走看看