《Code Complete》ch.18 表驱动法

是什么


一种scheme,用表来做信息存取,代替逻辑语句(if/else)

为什么

简化逻辑语句,避免大量嵌套
if/else 或者 switch/case

怎么用

三种访问表的方式

  1. 直接访问:将源数据作为key

  2. 索引访问:构建KV表

  3. 阶梯访问:分为连续区间,遍历或者二分查找

例子


// get the full name of weekday

// good
String[] weekdays = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

String getName(int day) {
return weekdays[day];
}

// bad
String getName(int day) {
switch (day) {
case 0:
return "Sunday";
break;
case 1:
return "Monday";
break;
// and so on
}
}

《Code Complete》ch.18 表驱动法,布布扣,bubuko.com

时间: 2024-12-13 10:08:11

《Code Complete》ch.18 表驱动法的相关文章

第18章 表驱动法(1)

这本书讲什么? code complete 是编码完成的意思,是一个软件项目开发过程中的重要里程碑(milestone).软件项目进行到这里,表名已经完成了所有的编码工作,即将开始系统测试.这本书讲的正是为了达到“编码完成”这一重要里程碑所必须的软件构建技术,确切的说,就是如何编写高质量的代码.作者认为,应该首先为人编写代码,其次才是为机器编写.代码主要是供人阅读的.遍布全书的提高代码质量的实实在在的技术和诀窍,是本书最有价值得部分. 表驱动法是一种编程模式(scheme)——从表里面查找信息而

《Code Complete》ch.23 调试

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

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

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

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

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

《Code Complete》ch.24 重构

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

《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):是指子程序中各种操作之间联系的紧密程度 编程的目标是让每一个子

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

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

《Code Complete》ch.29 集成

WHAT? 集成是这样一种软件开发行为:将一些独立的软件组合为一个完整的系统. WHY? 更容易诊断缺陷 尽早获得一个可工作的产品 更好的顾客关系 增强士气 更可靠地估计进度表 更准确的现状报告 HOW? 集成的两种方式 阶段式集成(爆炸集成) 增量集成(滚雪球集成) 增量集成的策略 自顶向下(Top-Down):使用底层stub类,逐渐替换为实际的类.若底层接口实现起来有bug,或者有性能问题,会导致顶层设计变更 自底向上(Bottom-Up):“让底层细节驱动高层类的设计”违反了信息隐藏原则