当前位置:C++技术网 > 资讯 > 如何使编码的结构变得简洁,使逻辑更加简单

如何使编码的结构变得简洁,使逻辑更加简单

更新时间:2015-06-23 15:46:49浏览次数:1+次

    这是应一朋友的邀请而写的,希望本文也能够给其他读者一些小小的帮助吧。
    回想当年,选择C语言学习就是喜欢简洁的风格。然后选择C++因为它继承了C语言的众多特性,并且开发效率也高。追求代码整洁也是我的一个风格。但是正如这位朋友所描述的,虽然功能能够实现,但是写出的代码却很繁冗。我很明白这种心情,对于追求整洁代码的朋友来说,这些冗余啰嗦的代码,虽然能够实现功能,但是却屡看不爽。有时候感觉自己写的代码很多,而别人一两句话就能够将功能实现,看起来思路清晰明了。我想,新手大概都有这样的想法和经历吧。那么我想我是有必要根据我的经验来说说,希望能给有这些困惑的朋友一点点帮助。
    这位朋友提到的是快速简洁的编码方式,我把快速去掉了,原因马上说明。通常我们衡量程序量是以代码量作为指标。但是正如冗长的代码并不能真正指示代码量一样,这样的指标有点绝对,只能作为一个模糊的标准。你用十行代码,高手用三行代码,完成了一个功能,不能说你的程序更好,说不定你的程序效率还要低一些,因为执行了很多不必要的指令。但是也就是这样,导致我们的一个错觉,代码越少开发越快。其实不然。高手写出来的代码极其精炼,功力深厚,并不是一般人能够做得到的,多多少少都有冗余代码,不够精炼。但是就这一些代码,普通水平的程序员是写不出来的。代码越少写起来或许越困难,那要对基础运用相当灵活。所以这些必须清楚。
    对于新手,请勿急勿躁。代码的简洁与否,正是与水平有联系的。基础扎实,就能够运用灵活,如果水平不够,不要一味追求代码的简洁,因为基础跟不上,你就不理解简洁的代码,运用还是很生分,反而不好。比如while(i)和while(i==0),如果是新手,基本上都是选择后面的,因为这样写一看就明白是什么意思,对于新手看起来就清楚明白。但是前者的写法,新手还得在心里想想怎么去判断这个逻辑,为什么可以这样写。因为表面上并没有逻辑判断式。如果是新手,请选择后者,千万别好高骛远。如果后面一种使用很熟练了,就可以考虑代码的精炼一点,然后采用前者写法。必须是使用很多遍才行,不要一看觉得这么简单,不值得看,往往有时候出错,就是因为这些小地方,出错了都不好找原因,比如写成while(i=1),结果是很难查的出来的,因为逻辑上代码不出错,编译不报错,但是程序执行却不是我们想要的结果。我曾经有一次调试了很久都没找到问题,反复的看代码,逻辑上都没有问题,最后突然看到判断式有点不正常,第一眼还没看出来,然后仔细一看,原来是把i==1写成了i=1。因为根据程序的逻辑不太好判断这种低级错误引起的问题,如果你的代码检查了好多遍仍然找不到问题,调试了也没有找到,请把注意力转移到这些基本的点上,说不定就是这样的问题导致的。所以,新手一定要把==的写法写到形成了条件反射,遇到判断相等时,要很清楚=和==的两种情况所带来的效果。如果都不成问题,可以尝试使用简洁代码。
    对于一个程序的开发,首先你要保证你的功能的实现。不管效率是不是低,代码冗不冗余,先实现功能再说。然后实现之后,作为一个程序能够正常的运行,执行预定的功能,这样就是一个完整的程序了。一开始,不要追求什么快速开发,使用什么快捷方式排版、快速注释,快速跳转代码页面,写简洁代码等,对于新手,这样的代码页面跳来跳去结果会使思路搅乱,新手就要慢一点,让思维跟上。如果一个高手给你解释一个功能实现的时候,把代码页切来切去,说了一通,你根本跟不上,只是觉得那样确实好方便,然后自己也去学,新手不建议这样做。你首先要对你的代码很熟悉,使用快捷菜单的转向定义(goto definition),这样你可以顺着思路跑,或者在类视图界面进行切换,这样有助于你对你的代码的了解和熟悉。那种使用工具助手跳来跳去绝对不是一个好的主意。对于一个软件开发,如果都是用过的功能,就没有什么快不快速的问题了,都是轻车熟路,就很快了。真正的快,就是你能够尽可能的脚踏实地,一步一步的写好代码,不要因为一个疏漏,导致bug重重。这里更不要迷恋于电影画面,手指狂敲,然后屏幕上代码飞闪,一个功能就出来了。这是电影,所以请你回归现实。编程不是练打字,多快是没有意义的。用的多,自然也快哦,不要刻意去追求这些东西。对于一个没有做过的功能,如果是算法方面的,如果是自己做着玩的,或者不是很紧急的,你最好自己写算法实现,如果是公司上班或者是项目任务,可以到网上参考别人的代码,甚至直接使用各种算法库提供的功能,如STL中的算法,都是现成的。如果自己能够写一遍算法,对你是绝对有帮助的。然后对于一般的功能实现,如果你没有做过,你主要的就是熟悉相关的开发知识然后使用。在多数情况,都是你没做过的功能,然后你会花很多时间去研究,真正开发的时间多半花在这里。所以说,追求快速开发,你就凭快速打字,精炼代码是远远不够的,你保证你每一行代码都是正确的,没有误写效率就很高了。不然会花大量的时间去调试。
    对于代码简洁,如果熟悉了基础的,既然你写多了就觉得没水平了,那么就可以使用精炼代码。但不是说想写就写得出来的。你可以根据课本上的一些样例代码,写得很精炼的,你可以化为己用。或者多看别人写的代码,看看人家写的风格,如果好的你可以吸收过来,这样你看多了,用多了,就成为了你自己的了。看了很多人的代码,你选择性的吸收,就成了你的代码风格了。代码也就变得简洁精炼。比如在写if判断时,一开始都是if else等,或者多个else,甚至代码嵌套,这样代码就感觉好庞大。开始觉得写嵌套还蛮有意思,但是后来嵌套多了,写的代码也就冗余了。如果嵌套达到五六级,每个嵌套都要缩进,最后每个嵌套里的代码又很多,一屏还看不完,这样你看到这些代码,你的心理都承受不住,更不用所代码简洁了。你可以看看其他人的代码写法,比如,可以采用状态码,或者用一个判断,不符合就return,在后面直接写符合情况的代码,就不用if else了,这样代码就少些了。其他方面同样也是,先自己写出了很多冗余的代码,然后慢慢吸收他人的代码,优化自己的代码。这就是为什么很多人都建议多看代码的原因,可以有效提高自己的编码水平。比如对于结构体的第一个成员赋值,其他的成员清零。第一种原始的写法就是挨个的赋值,如果有六个成员就要写六个赋值语句,代码长。然后进化一下,先将结构体清零,然后给第一个成员赋值,就缩短为两行。再进化一下,在声明结构体变量时初始化的花括号中,只给一个值,默认就是给第一个成员赋值,其他的都清零。这样,就从7行简化到3行,再简化到1行。这样人家一行代码顶你七行代码,差别就在这,因为你没有把结构体初始化的基础知识运用上,一些看似不重要的规则,如果灵活运用将会极大的简化你的代码。这也就慢慢提升你的水平了,因为对这些基础知识你就有了进一步的理解,使用了就理解的更深。
    基本上就是这样,多写基础代码,写熟练了然后再自己尝试各种优化,然后多看别人代码,吸收优秀代码,最后你就能够写出精炼简洁的代码了。新手是不可能一步登天的,需要循序渐进的。
    切记,脚踏实地,写好了基础,再提升水平。看熟了不等于用熟了,实践才是检验真理的唯一标准。