软件构造之语句

补:指针构造技巧

按照正确的顺序删除链表中的指针

可以先新后旧

不要吝啬指针变量的使用、要专建专用

避免之争的强制类型转换

错误示范

1
2
3
int a = l;
int *p = &a;
float *p1 = (float*)p;

删除和释放指针

指针、动态内存…  悬空指针、二次释放

1
2
3
Assert(NULL!=pointers, "...");
delete pointers;
point = NULL;

删除变量之前检查非法指针
在删除或释放指针后把他们设为NULL

c++’s AUTO_PTR

智能指针

注意:拷贝和赋值会转移指针所有权


语句 statement

正确性可读性可维护性

条件语句

首先写正常路径

检查最后一位else

检查等量的分支

if后跟一个有意义的子句

布尔函数的策略

——例如,短路求值:c++和java以下是正确的

1
while(i < MAX_ELEMENTS and item[i] <> 0)

利用短路求值的判断
1
if((debominator != 0 && ((item / denominator) > MIN_VALUE))...

效率用上面的写法,保证正确性的写法是使用嵌套例子

问题——深层嵌套 避免的方法

  1. 重复判断某一部分条件——判断会变得更复杂
  2. 转换为if-then-else

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //不合理的嵌套,需要用更利于理解逻辑的写法
    if(10 < quantity){
    if(100 < quantity){
    if(1000 < quantity){
    ...
    }
    else{
    ...
    }
    }
    ...
    }
  3. 转换为case

  4. 使用单独的子程序——循环体提取为子程序
  5. 使用OO方法——多态,不同的类封装不同的子程序

循环语句

判断循环是否会终止(死循环)

循环种类:计数循环、无限循环、迭代器循环、

循环灵活性和检查位置

  1. 带出口循环:半循环 改为 带出口的无限循环

    把所有退出条件放在一起,防止检测调试时遗漏

  2. 使循环尽量模块化

三方面考虑循环控制

如何进入循环

  1. 只从一个位置进入循环——goto不用于跳出循环
  2. 初始化代码放在循环前面
  3. while(true) 无限循环
  4. 多使用for循环——控制代码集中在一起
  5. 在while循环更适用时,不用for——控制部分比较复杂

如何退出循环

  1. 要确认循环是否终止
  2. 终止条件要明显
  3. 为了终止循环,改变for的下标值
  4. 避免出现依赖于循环下标最终取值的行为——不要在循环终止后继续使用循环下标,因为下标值不可确定,且不易读

……

决策点(DECISION POINT)度量法

子程序的多处返回

缩进层次过深的循环

使用防卫子句重写

留心栈空间

递归 = 循环+栈……

GOTO

本文标题:软件构造之语句

文章作者:松子

发布时间:2018年12月18日 - 18:12

最后更新:2022年03月21日 - 23:03

博文链接:https://songzi.info/post/2aa66caa/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%