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

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

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

  • 相关阅读:
    【笔记】程序员编程艺术 字符串转换成整数
    解决Eclipse 项目报错:Unbound classpath container: ‘JRE System Library [JavaSE-1.7]
    python_day1(初始Python)
    ActiveMQ 复杂类型的发布与订阅
    win8.1 Framework3.5安装不上的问题
    JVM探秘:内存溢出
    JVM探秘:Java对象
    JVM探秘:Java内存区域
    Vmware安装的linux系统开机黑屏,点关闭就显示虚拟机忙怎么怎么解决?
    Java基础--面向对象(上)
  • 原文地址:https://www.cnblogs.com/shyleoking/p/1536602.html
Copyright © 2011-2022 走看看