[Linux][2011-5-25] 程序员---好的代码

来源:互联网 发布:网络推广员岗位职责 编辑:程序博客网 时间:2024/06/06 01:12

今天看到圈复杂度为 41的代码, 缺少必要的说明性注释, 感觉, 一头雾水, 难以接收.

 

什么是好的代码:

1.清晰明了, 必要适当的宏定义, 替代(数字/字母/特殊符号).

如:#define REDIS_EL "/r/n"

#define NOT_EXIST (-2)
#define TCP_PACKAGE_LEN 5120

#define REDIS_DEFAULT_HOST "cache.12345678.com"

#define REDIS_DEFAULT_PORT  6379

 

例子, 如果你在代码中看到, return -2,  好呢, 还是, return NOT_EXIST 好呢??

 

清晰的宏定义, 可以是代码方便阅读, 清晰易懂, 容易接手.

 

 

2.圈复杂度 小于 15.

将适当的代码功能提取, 做到, 高耦合, 低内聚.

 

3.适当的换行和空格

redis的代码举例:

static int vmWriteObjectOnSwap(robj *o, off_t page) {
    if (server.vm_enabled) pthread_mutex_lock(&server.io_swapfile_mutex);
    if (fseeko(server.vm_fp,page*server.vm_page_size,SEEK_SET) == -1) {
        if (server.vm_enabled) pthread_mutex_unlock(&server.io_swapfile_mutex);
        redisLog(REDIS_WARNING,
            "Critical VM problem in vmWriteObjectOnSwap(): can't seek: %s",
            strerror(errno));
        return REDIS_ERR;
    }
    rdbSaveObject(server.vm_fp,o);
    fflush(server.vm_fp);
    if (server.vm_enabled) pthread_mutex_unlock(&server.io_swapfile_mutex);
    return REDIS_OK;
}

 

 

如果改成如下, 你看了, 会有怎样的感觉呢?

static int vmWriteObjectOnSwap(robj *o, off_t page)

{
    if (server.vm_enabled)

    {

        pthread_mutex_lock(&server.io_swapfile_mutex);

    }


    if (fseeko(server.vm_fp,page*server.vm_page_size,SEEK_SET) == -1)

    {
        if (server.vm_enabled)

        {

            pthread_mutex_unlock(&server.io_swapfile_mutex);

        }
        redisLog(REDIS_WARNING,
                      "Critical VM problem in vmWriteObjectOnSwap(): can't seek: %s",
                       strerror(errno));
        return REDIS_ERR;
        }

    }


    rdbSaveObject(server.vm_fp,o);
    fflush(server.vm_fp);


    if (server.vm_enabled)

    {

          pthread_mutex_unlock(&server.io_swapfile_mutex);
     }

     return REDIS_OK;

}

 

 

3.适当的明确注释

利人利己,

亲身经历, 自己写的代码, 时间长了, 就不知道, 是做什么的

 

注释无论中文, 英文, 简单明了

 

 

总结:

简单明了, 清晰, 易于接手的代码才是好代码, 才是好程序员写的代码!

 

晦涩难懂, 挡住了别人, 也为自己埋下了陷阱. 别人难维护, 自己也难维护.

 

PS: 没有批评redis开源源代码的意思!  只是说明, 有些源代码太晦涩难懂了! 当然, redis 如今的成就, 鄙人难以到达的.

 

原创粉丝点击