《Code Complete》ch.16 控制循环

WHAT?

反复执行的代码片段(你是第一天学编程吗)

WHY?

知道如何使用及何时使用每一种循环是创建高质量软件的一个决定性因素

HOW?

检测位于循环开始/循环结尾

带退出的循环

进入循环

  • 只从一个位置进入循环
  • 把初始化代码紧放在循环欠扁前边
  • 用while(true)处理无限循环
  • 在适当的情况下多使用for循环
  • 在while循环更适用的时候,不要用for循环

处理循环体

  • 用{}将循环体括出
  • 避免空循环
  • 把循环内务操作放在循环开始or结尾
  • 一个循环只做一件事

退出循环

  • 确认循环可以终止——在脑海里模拟
  • 使循环终止条件看起来明显
  • 不要为了终止循环而胡乱改动for循环的下标
  • 避免在循环外使用循环下标(依赖循环下标的最终取值)
  • 在while循环中使用break退出,而不是boolean标记
  • 在循环开始处使用continue进行判断
  • 若语言支持,则使用带标号的break

使用循环变量

  • 用整数或枚举类型表示数组、循环边界
  • 使用有明确意义的下标变量名
  • 把下标限制在本循环内

循环应该有多长

  • 尽可能短,一目了然
  • 嵌套控制在3层以内
  • 把长循环内容移至子程序中
时间: 2024-11-09 02:02:05

《Code Complete》ch.16 控制循环的相关文章

《Code Complete》ch.11 变量名的力量

What? 如何给变量命名 Why? 易读(你三个月前的代码=别人的代码),易记,恰如其分 整齐的命名具有美感,强迫症患者居家旅行杀人放火之必备 How? 以问题为导向 好名字反映的是问题(what),并非解决方案(how).名字不应体现计算细节 // good Object studentData; int sum; // bad Object inputData; int calcValue; 控制变量名长度 合适的变量名长度为10-16个字符 较长的名字适用于少用到的全局变量,较短的名字适

《Code Complete》ch.24 重构

WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件项目,应该首先以系统化的方法进行需求开发,定义一份严谨的列表来描述程序的功能.设计完全遵循需求,并且完成的相当仔细,这样就让程序员的代码编写工作从头到尾直线型地工作.表明绝大多数代码首次编写后就已完美,测试通过即可被抛诸脑后.代码被修改的惟一时机发生在交付使用后在新版本进行功能的添加 现实:在初始开

《Code Complete》ch.20 软件质量概述

WHAT & WHY ? 软件质量的特性 外在特性 正确性(Correctness) 可用性(Usability) 效率(Efficiency) 可靠性(Reliability) 完整性(Integrity) 适应性(Adaptability) 精确性(Accuracy) 健壮性(Robustness) 内在特性 可维护性(Maintainability) 灵活性(Flexibility) 可移植性(Portability) 可重用性(Reusability) 可读性(Readability)

《Code Complete》ch.26 代码调整技术

WHAT? 提高代码运行速度的方法,减少代码的资源占用 WHY? 这里提出的都是“可以尝试的”方法,有的或许在你的环境根本不起作用,有的则能实实在在产生很好的效果 HOW? Logic - 逻辑 在知道答案后停止判断 按照出现频率来调整判断顺序:让运行最快和判断结果最肯能为真的判断先行,即,让程序更容易进入常见状况的处理 用查询表代替复杂表达式 惰性求值:lazy loading Loop - 循环 将判断外提 合并:将两个相同计数器的循环合并 展开:循环被完全展开后,将具有更快的速度 尽量减少

《Code Complete》ch.23 调试

WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 确定错误原因:二分法 同他人讨论问题 忏悔式调试 抛开问题,休息一下 修正问题 动手之前先要理解问题 理解程序本身,而不仅仅是问题 验证对错误的分析 放松一下 治本,而不是治标 修改代码时一定要有正确的理由:不要随机地修改代码,在没有理解代码时对她做的改动越大,你对她能正确工作的信息就越低 检查自

《Code Complete》ch.25 代码调整策略

WHAT? 本章讨论程序性能调整问题.但是对用户来说,程序员按时交付软件,提供一个清爽的用户界面,避免系统经常死机常常比程序性能更加重要 WHY? 在程序设计这种文化中,编写出能够节省几微秒的代码可以证明你很酷-- HOW? Pareto法则 即80/20法则,指你可以通过20%的努力获取80%的成果 一些无稽之谈 在搞基高级语言中,减少代码行数可以加快代码执行速度 特定运算可能比其他的更快,代码规模也较小:在某个环境下提升程序性能的方法放到另一个环境中可能会损害程序性能.在调整代码的时候你实际

《Code Complete》ch.18 表驱动法

是什么 一种scheme,用表来做信息存取,代替逻辑语句(if/else) 为什么 简化逻辑语句,避免大量嵌套的 if/else 或者 switch/case 怎么用 三种访问表的方式 直接访问:将源数据作为key 索引访问:构建KV表 阶梯访问:分为连续区间,遍历或者二分查找 例子 // get the full name of weekday // good String[] weekdays = { "Sunday", "Monday", "Tues

《Code Complete》ch.8 防御式编程

WHAT? 主要思想:子程序不应因传入参数错误而被破坏 WHY? 保护程序免遭非法输入的破坏 HOW? 断言 assert denominator != 0 : "denominator should not be 0"; // 启动VM时需要 -ea 参数用以启动assert功能 只用于开发.维护阶段 用错误处理代码来处理预期会发生的状况,用断言来处理绝不会发生的状况 避免把需要执行的代码放入断言中 用断言来注解并验证前条件和后条件 错误处理技术 返回中立值(当对返回结果准确性要求较

《Code Complete》ch.7 高质量的子程序

WHAT? 子程序(routines)是为实现一个特定目的而编写的可被调用的方法或过程.在C++中是函数(function),在Java中是方法(method),在VB中是函数过程(function procedure)或子过程(sub procedure). WHY? 降低复杂度 引入中间.易懂的抽象 避免代码重复 支持继承.重写 隐藏实现细节 提高可移植性 改善性能(对明确的子程序进行优化) HOW? 内聚性(cohesion):是指子程序中各种操作之间联系的紧密程度 编程的目标是让每一个子