《代码大全》第二版--第四部分

 

第十四章:组织直线型代码

    14.1 必须有明确顺序的语句:顺序与逻辑关系和依赖性有关,逻辑上须要顺序排列的,后面对前面有依赖的须要顺序组织;组织那些有顺序逻辑的语句,最好用名字、参数、注释等方法来显示的代表语句之间的联系。c++

    14.2 顺序无关的语句:就近原则,声明和使用靠拢。这样能加强代码的可阅读性。(局部聚拢)算法

    

第十五章:使用条件语句

    条件控制:if  else  case  switch编程

    15.1 if语句:首先处理正常逻辑和非正常逻辑取决于实际状况,一般先处理正常逻辑,在逻辑很是复杂的时候能够考虑使用卫语句或者从新梳理逻辑来减小if嵌套层数。if嵌套层数过多,不利于代码阅读,复杂度提升。有的时候咱们根据se或者架构师的文档平铺直叙的开发会形成多层if嵌套,这个时候咱们能够先理解下se和架构师的意图,从新编排逻辑以下降复杂度数组

    15.2 case:为case选择有效的排列顺序,正常的case状况排在前,频率高的case排在前;若是case中的处理逻辑很是复杂,能够考虑将这些语句封装成过程。 c++语言的case中要记得加break,default条件能够用来检测错误,若是全部正常逻辑没覆盖到,跑到default分支里去了,说明出现了某种异常。安全

    

第十六章:控制循环

    while、 for 、do while 架构

    16.1 选择循环的种类函数

        计数循环:执行次数必定优化

        连续求值的循环:迭代次数不必定设计

        无线循环递归

        迭代器循环:容器迭代元素

        当不知道要循环多少次的时候使用循环while,当循环固定次数的时候建议使用for

    16.2 循环控制: 

            注意事项:循环语句用大括号包起来,循环变量取名要有意义,循环语句最好不超过10行,嵌套层数小于2;循环上限或者退出界限必定要判断好,不要形成下标越界踩内存的状况。

    16.3 轻松建立循环:有内到外,先写须要循环的语句,在用循环将语句包括起来。

    16.4 循环与数组的关系:许多循环都是用来操做数组的

 

第十七章:不常见的控制结构

    递归、goto

    17.1 子程序中多出返回: 子程序中有多处return的状况,能够进一步排查下是否能将多处return合为一处,经过使用卫语句和逻辑整改的方法; 尽可能减小逻辑重复,嵌套过深场景。        

    17.2 递归:选择性使用递归语句,除非能优雅的解决问题。递归在代码可读性上表现不太好,可是有的问题使用递归能优雅的解决。

        递归对处理复杂逻辑的时候是颇有价值的,好比走迷宫(算法类用的多),实际开发过程当中,通常的逻辑均可以用循环代替递归,建议能用循环就不要用递归。

        使用递归注意事项:确保递归可以中止(退出条件), 使用安全计数来防止无穷递归;把递归限制在一个子程序内(递归语句不要过长);注意考虑栈空间,防止栈溢出。

    17.4 goto

        坏处:goto影响逻辑的复杂度,代码的易读性,排版格式和编译器优化

        好处:减小代码执行量,直接跳转能够跳过不须要执行的代码;跳转到指定位置,能够设计成try catch finally的处理方式,设计成异常处理;

        c++代码编写过程当中,建议不要写goto代码,须要用到goto逻辑的地方其实都是能够经过其余语句来替换的。

 

第十八章: 表驱动法

    表驱动法是一种编程模式,从表里查找信息而不使用逻辑语句 if else

    18.1 表驱动法使用总则:在适当条件下,使用表驱动法可使得逻辑更简单、更容易修改。

        访问表的方法:直接访问、索引访问、阶梯访问

        表中存储的内容: 数据或者动做(函数)

    18.2 直接访问表:将要使用的数据算好后放入表中,须要的时候直接取(难度在于设计表)

    18.3 索引访问表:先用一个基本数据类型的数据从一张索引表中查出一个键值,而后在用这个键查出你感兴趣的主数据。主表(索引表)+ 主数据表

    18.4 阶梯访问表:相似于索引表,索引的键为一个过程范围,而不是一个具体的kay值。阶梯要注意阶梯的端点。     

 

第十九章:通常控制问题

    19.1 布尔表达式

        1.明确的使用true or false 而不是0 或 1 

        2. 把复杂的布尔表达式作成布尔函数,用一个好的命名来表示布尔结果

        3. if判断的布尔表达式中;确定的表达式比否认的表达式好。

        4. 用括号使多个布尔表达式之间链接关系更清晰

        5. 编译器对布尔表达式的理解可能不一样,有的可能把全部布尔求出来在计算布尔值,有的多是采用短路的方式,若是前一个布尔知足了条件后一个布尔就不执行了。

        6.常量放在==符号左边能够避免由于将==错误写成=而带来的错误

    19.2 复合语句:经过大括号包起来

    19.3 空语句:用大括号代替分号;使用大括号的好处是避免错误、而且能够显示的声明这个是一个空语句

    19.4 屈服危险的深层嵌套:不超过3层; 能够采用改变逻辑、使用卫语句、封装子函数等方法来简化深层嵌套。

    19.5 结构化编程:三种基本的结构化编程

        顺序,选择,循环

    19.6 控制结构和复杂度

        控制流是影响复杂度的绝大因素,将复杂语句提取为另外一个子程序,不会下降总体的复杂度,可是会下降同一时刻所需关注的复杂度

    总结:布尔是最基本的判读逻辑,若是布尔表达式的逻辑过于复杂或者布尔表达式中的布尔逻辑过多,能够考虑将布尔表达式单独封装成一个子函数或者一个语句,用一个具备实际意义的名字来接收这个布尔结果值。 应该避免写出嵌套过深的代码,若是嵌套过深,最方便的方法就是提取语句进行封装,若是时间容许能够分析使用卫语句或者改变逻辑来减小嵌套。 下降代码的复杂度是提升代码水平的关键。

相关文章
相关标签/搜索