【Unix编程艺术】第9章 生成

来源:互联网 发布:网络机顶盒使用视频 编辑:程序博客网 时间:2024/06/06 08:59

9章 生成

9.1 数据驱动编程

数据驱动编程时,需要将代码和数据结构划分清楚,这样,在改变程序的逻辑时,只要编辑数据结构,而不是代码。

OO不同的是,1、数据驱动中,数据不仅仅是某个对象的状态,也定义了程序的控制流。2OO首先考虑的是封装,数据驱动看重的是尽可能编写少的固定代码。

数据驱动的重要原则是:始终把问题层次晚上推。

ascii

有意想不到的有用处的用法是好程序的标志之一。

要想程序和其他程序能够合作,那么程序的输出或者输入的格式都应该风格良好。

垃圾邮件,传统模式中存在着博弈;统计学过滤器则根据用户的反馈生成自己的过滤规则。

9.2 专用代码的生成

生成ASCII显示的代码

如果在程序中直接通过初始化器来写出所有行,会出现对齐、每行很难保证79字符的问题。Ascii源码的解决方法是通过脚本生成这部分代码。

Void showHelp(FILE *out, char *progname)

{

fprintf(out,"Usage: %s [-dxohv] [-t] [char-alias...]\n", progname);

#define P(s) fputs(s "\n", out);

#include "splashscreen.h"

#undef P

exit(0);

}

splashscreen.hMakefile生成:

splashscreen.h: splashscreen

sed <splashscreen >splashscreen.h -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/.*/P("&");/'

从数据产生代码,使得可编辑的用法屏幕和它的显示一致。

为列表生成HTML代码

我们可以在代码中直接编写生成HTML表格的代码,但这样每当新添加数据的时候都需要修改生成<tc><td>的代码。更好的解决方案是把数据放在类似下面的文本文件中:

Aalat    :David Weber        :The Armageddon

Aelmos    :Alan Dean Foster    :The man

Agandar    :Donald Kingsbury    :Psychohistorical Crisis

而使用脚本来生成HTML表格:

# cat data | awk -F: '{printf("<tr><td>%s</td><td>%s</td></tr>\n",$1,$2,$3)}'

<tr><td>Aalat    </td><td>David Weber        </td></tr>

<tr><td>Aelmos    </td><td>Alan Dean Foster    </td></tr>

<tr><td>Agandar    </td><td>Donald Kingsbury    </td></tr>

代码生成的好处:

1. 尽可能少干活;

2. 让数据塑造代码;

3. 依靠工具;

4. 机制同测试分离。

0 0