zoukankan      html  css  js  c++  java
  • 重构代码想到的

    我的代码是用C语言写的,因此,想到的东西可能只适用于C语言哈


    尽量不要使用全局变量

    【原因】:

    1. 代码的逻辑非常依赖于函数的调用顺序;
    2. 代码的逻辑很难被看懂,从而极大地降低了代码的可维护性;
    3. 由于原因2,所以代码中常常隐藏有bug;

    因为全局变量通常是用来保存某种状态,从而在各个函数中可以被很方便地修改和参与判断,那么应对方法也很简单,就是:

    【应对方法】:

    1. 状态变量、指针或者数组,在一个总包函数中被定义;
    2. 修改上述状态信息的子函数的调用都集中在总包函数中;
    3. 子函数可以通过返回值,或者指针或数组参数,返回状态信息;
    4. 子函数只能修改一种状态信息,或者只判断一种状态信息; 

    一个函数尽量只做一件事情

    【原因】:

    1. 因为只做一件事情,函数的逻辑可以写得比较简单;
    2. 简单的事情通常很难出错;
    3. 简单的事情通常也很容易看懂,从而可维护性很高;

    【备注】:

      有些人心理可能会犯嘀咕:每个函数只做一件事情,岂不显得自己代码写得没有水平,显得非常笨拙嘛。用《UNIXT编程艺术》书中的一句话反驳就是:宁花机器一秒,不花程序员一分;代码的可维护性和正确性比程序员的虚荣心更重要。


     一个循环也尽量只做一件事情

    【原因】:

    1. 循环中做的事情多了,很容易犯错,举个例子:
    for (i=0; i<24; i++)
    {
      for(j=0; j<8; j++)
      {
         a[i][j] = read(a.bin);
         b[i][j] = read(b.bin);
         if (a[i][j] > b[i][j])
           break;
      }      
    }

      上面的代码中,作者本意是想利用读文件自动移动文件读指针的特性,在for循环中一边读文件,一边比较,但是一旦break出去for循环2后,再进入for循环2后,作者本意想读的文件位置与实际读到的可能就不同了。

    修改以后的代码如下:

    for (i=0; i<24; i++)
    {
      for(j=0; j<8; j++)
      {
         a[i][j] = read(a.bin);
         b[i][j] = read(b.bin);
       }      
    }
    
    for (i=0; i<24; i++)
    {
      for(j=0; j<8; j++)
      {
         if (a[i][j] > b[i][j])
           break;
       }      
    }

    上面的代码看上去很蠢,但是绝对不会出错,逻辑也非常清晰明了。

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/cnpirate/p/7017473.html
Copyright © 2011-2022 走看看