惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
L
LangChain Blog
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
博客园_首页
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
美团技术团队
V
V2EX

博客园 - erik168

C#事件的定义与触发[查找] join语法 DataAdpater的Fill研究 关于event的浏览器兼容问题-from佛 - erik168 - 博客园 javascript实现xslt转换xml - erik168 - 博客园 幻方算法 2个JS细节 DOM模型设置属性细节 - erik168 - 博客园 js的Hashtable类(转) - erik168 - 博客园 几个关于javascript的细节 .net的同步 .net线程基础知识 C#开发ActiveX控件 从数据库中查询所有表及所有字段的SQL语句(转) 保存javascript运行状态 解决IE访问域外信息警告对话框弹出 创建XmlHttpRequest - erik168 - 博客园 vi概况 [资料查找结果]一些SHELL要知道的东西 - erik168 - 博客园
表驱动法
erik168 · 2006-12-03 · via 博客园 - erik168

《CodeComplete》中定义:从表里面查找信息而不使用if、else等逻辑语句的编程模式。
使用表驱动法,生成代码比复杂逻辑代码更简单更容易修改。
比如计算每个月中的天数的js(修改自《CodeComplete》中的VB代码):
switch(month){
case 1,3,5,7,8,10,12:
day=31;break;
case 4,6,9,11:
day=30;break;
case 2:
day=28;break;
}
使用表驱动法:
var days=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
day=days[month-1];

而在我看来,表驱动法不仅仅可以用在复杂逻辑的简化。比如一个表格要构建很多单元格,就要不断的copy&paste那些createElement和appendChild。而使用表驱动法,可以如下构建:
var TDs=new Array(......);
var trEle=document.createElement("tr");
var tdEle;
for(var i=0;i<TDs.length;i++){
tdEle=document.createElement("td");
tdEle.innerHTML=TDs[i];
trEle.appendChild(tdEle);
}
在这个内存便宜、编译器自动优化代码的年代,这种优雅的写法,会节省很多无谓的劳动。