情有千千劫,有感于程序编码的质量(一)

 

情有千千劫,有感于程序编码的质量()

代码的编写就和我们写文章一样,良好的规范和习惯可以使我们的代码写出来特别的优雅,加强机器的执行效率.一般来说,真正好的代码让人看起来非常清爽,而不是晦涩难懂,杂乱无章的天书。所以不管在什么情况下,思想,正是因为它,主宰这世界上的一切,当然,我们的代码也不例外。正如你是如何看待世界,就如同世界如何看待你。思想的精髓也在于此。我们写代码之前,切记一定要三思而后行,之所以站得高才能看得远嘛!好的,让我们看一下这些代码。可能这些都是平常你我所构建出来的。文中的语言会使用C# Java,因为JDK.net FrameWork中的库函数很少,而这两门又是当下比较流行的两门语言,所以我们把这两门语言结合一起来看.

 

1.逻辑

(1)判断数组里面的值的逻辑。(C# )

//*****************************************************

bool isEqual = false;

int []a = new int[]{0,1,2,3,4,5,6,7,8,9};

   for(int i=0;i<a.Lenght;i++)

{

    if(a[i]>5)

           isEqual = true;

   }

//*****************************************************

 

问题:

      当找到第一个值,程序的循环并没有退出。要知道计算机在背后做出了很多事情,我们需找出它正在做些什么事。循环——往往是消耗资源的最终杀手,在我看来有,提高程序的效率至少有百分之九十的改进是需要改进循环。

 

解决方案:

*isEqual = true后添加break语句,退出循环。

*使用goto语句,模拟break语句,但不推荐使用。(java里面同const关键字一样,只保其作为的关键字,而实际上却是不可用,所以此方法在java里面不可用),

*for循环改为while循环.

 For循环改while循环(java):

//*****************************************************

    public static void main(String[] args) {

       boolean isEqual = false;

       int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

       int i = 0;

      

       while(!isEqual || i<a.length){

           i++;

           if (a[i] > 5)

              isEqual = true;

       }

       System.out.println(i);

}

//*****************************************************

输出结果: 6

 

本应该循环六次做完的事,在之前的那个循环做了十次.而我们需要判断的结果却是一样的.

 

(2)永远不要使用异常机制来中断循环.

   来看一下这个函数.(java)

//*****************************************************

           public static void main(String[] args) {

       boolean isEqual = false;

       int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

       int i = 0;

 

       while (!isEqual ) {

           i++;

           try{

           if (a[i] > 12)

              isEqual = true;

           }

           catch(Exception ex){

              break;

           }

       }

       System.out.println(i);

    }

//*****************************************************

 

 在这里这个函数的作者很自作聪明的想用异常机制来中断循环,其实不知道,其性能在里面大打折扣,要知道异常机制用在循环里面性能极为低下,一般来说,用比不用要慢90倍左右.

 

(3)不要对函数形参进行判断.

       这里所指的不要,是指看情况的.一般来说,面对用户级的都需要进行判断,而对于代码编写者一般就不需要.当然如果你是要写一个发布的库,就当别论了.来看一下这两个函数.(java)

//*****************************************************

    public static void main(String[] args) {

       int[] a = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

       int[] b = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };

       List<int[]> list = new LinkedList<int[]>();

       list.add(a);

       list.add(b);

       for (int i = 0; i < list.size(); i++) {

           checkValue(list.get(i));

       }

    }

 

    private static boolean checkValue(int[] a) {

       boolean isEqual = false;

       int i = 0;

       if(a!=null){

       while (!isEqual || i < a.length) {

           i++;

           if (i > 5)

              isEqual = true;

       }

}

       return isEqual;

    }

//*****************************************************

 

这里并没有要要用户输入几个数来生成一个数组.再加一个if(a!=null)有点多此一举,画蛇添足”.因为是此代码是程序级的,对形参的判断看是什么情况,当然程序如果是公开的库,还是需要对形参进行一定的判断的,总的来说,形参在程序里面能不判断还是不要判断的为好.(C#)

 

//*****************************************************

class TestLoop

{

    public static void Main()

    {

        int num = Console.Read();

        int[] testArray = new int [100];

        for (int i = 0; i < 100; i++)

        {

            if (num < 10)

                testArray[i] = 100;

            else

                testArray[i] = 1000;

        }

    }

}

 

//*****************************************************

这是一个再平常不过的例子,只是跟据用户输入的数来判断把这个数组如何赋值.可读性比较高.很多初学者应该都会这样写吧.而我却会这样写,可读性可能下降一些,但是效率可能会高很多.

//*****************************************************

class TestLoop

{

    public static void Main()

    {

        int num = Console.Read();

        int[] testArray = new int [100];

        if (num < 10)

        {

            for (int i = 0; i < 100; i++)

            {

                 testArray[i] = 100;

            }

        }

        else

        {

            for (int i = 0; i < 100; i++)

            {

                testArray[i] = 1000;

            }

        }

    }

}

//*****************************************************

别告诉我你不知道这样写的好处啊,呵呵,注意if语句是在循环外边.只要判断一次,而上一个却要判断100.

 

未完,待续…………………………………………………………

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页