shell学习笔记_2_软件工具的原则
时间:2010-08-16 来源:chenliangmoran
随着时间的流逝,人们开发出了一套设计与编写软件工具的原则。好的软件工具应该具备
下列特点:
一次做好一件事 在很多方面,这都是最重要的原则。若程序只做一件事,那么无论是设计、编写、 调试、维护,以及生成文件都会容易得多。举例来说,对于用来查找文件中是否有 符合样式的grep程序,不应该指望用它来执行算术运算。 这个原则的结果,自然就是会不断产生出更小、更专用与特定功能的程序,就像专 业木匠的工具箱里,永远会有一堆转为特定用途所设计的工具。
处理文本行,不要处理二进制数据 文本行是UNIX的通用格式。当你在编写自己的工具程序时便会发现,内含文本行 数据文件很好处理,你可以用任何垂手可得的文本编辑器来编辑它,也可以让这 些数据在网络上与各种机器架构之间传输。使用文本文件更有助于任何自定义工具与 现存的UNIX程序之间的结合。
使用正则表达式 正则表达式(regular expression)是很强的文本处理机制。了解它的运作模式并加 以使用,可适度简化编写命令脚本(script)的工作。
此外,虽然正则表达式多年来在工具与UNIX版本上不断在变化,但POSIX标准 仅提供两种正则表达式。你可以利用标准的库程序进行模式匹配的工作。这样就可 以编写出专用的工具程序,用于与grep一致的正则表达式(POSIX称之为基本型 正则表达式,Basic Regular Expressions,BRE),或是用于与egrep一致的正则 表达式(POSIX称之为扩展型正则表达式,Extended Regular Expressions,ERE)。
默认使用标准输入/输出 在未明确指定文件名的情况下,程序默认会从它的标准输入读取数据,将数据写到 它的标准,至于错误信息则会传递到标准错误输出。以这样的方式来编写程序,可 以轻松的让它们成为数据过滤器(filter),例如,组成部分的规模越大,越需要 复杂的管道(pipeline)或脚本来处理。
避免喋喋不休 软件工具的执行过程不该像在“聊天”(chatty)。不要将“开始处理”(starting processing)、“即将完成”(almost done)或是“处理完成”(finished processing)这类信息放进程序的标准输出(至少不该是默认状态)。在工具程序 的世界里,没有消息就是好消息。 这个原则其实还有另外一个含义。一般来讲,UNIX工具程序一项遵循“你叫它做什么, 你就会得到什么”的设计哲学。
输出格式必须与可接受的输入格式一致 专业的工具程序认为遵循某种格式的输入数据,例如标题行之后接着数据行,或在 行上使用某种字符分割符等,所产生的输出也应遵循与输入一致的规则。这么做的 好处是,容易将一个程序的执行结果交给令一个程序处理。
让工具去做困难的部分 虽然UNIX程序并非完全符合你的要求,但是现有的工具或许已经可以为你完成 90%的工作。接下来,若有需要,你可以编写一个功能特定的小型程序来完成剩下 的工作。与每次都从头开始来解决各个问题相比,这已经让你省去许多工作了。
构建特定工具前,先想想 如前所述,若现存系统里就是没有需要的程序,可以花点时间构建满足所需的工 具。然而,动手编写一个能够解决问题的程序前,请先停下来想几分钟。你所要 做的是,是否有其他人也需要做?这个特殊的工作是否有可能是某个一般问题的 一个特例?如果是的话,请针对一般问题来编写程序。当然,这么做的时候,无 论是在程序的设计或编写上,都应该遵循前面所提到的几项原则。
一次做好一件事 在很多方面,这都是最重要的原则。若程序只做一件事,那么无论是设计、编写、 调试、维护,以及生成文件都会容易得多。举例来说,对于用来查找文件中是否有 符合样式的grep程序,不应该指望用它来执行算术运算。 这个原则的结果,自然就是会不断产生出更小、更专用与特定功能的程序,就像专 业木匠的工具箱里,永远会有一堆转为特定用途所设计的工具。
处理文本行,不要处理二进制数据 文本行是UNIX的通用格式。当你在编写自己的工具程序时便会发现,内含文本行 数据文件很好处理,你可以用任何垂手可得的文本编辑器来编辑它,也可以让这 些数据在网络上与各种机器架构之间传输。使用文本文件更有助于任何自定义工具与 现存的UNIX程序之间的结合。
使用正则表达式 正则表达式(regular expression)是很强的文本处理机制。了解它的运作模式并加 以使用,可适度简化编写命令脚本(script)的工作。
此外,虽然正则表达式多年来在工具与UNIX版本上不断在变化,但POSIX标准 仅提供两种正则表达式。你可以利用标准的库程序进行模式匹配的工作。这样就可 以编写出专用的工具程序,用于与grep一致的正则表达式(POSIX称之为基本型 正则表达式,Basic Regular Expressions,BRE),或是用于与egrep一致的正则 表达式(POSIX称之为扩展型正则表达式,Extended Regular Expressions,ERE)。
默认使用标准输入/输出 在未明确指定文件名的情况下,程序默认会从它的标准输入读取数据,将数据写到 它的标准,至于错误信息则会传递到标准错误输出。以这样的方式来编写程序,可 以轻松的让它们成为数据过滤器(filter),例如,组成部分的规模越大,越需要 复杂的管道(pipeline)或脚本来处理。
避免喋喋不休 软件工具的执行过程不该像在“聊天”(chatty)。不要将“开始处理”(starting processing)、“即将完成”(almost done)或是“处理完成”(finished processing)这类信息放进程序的标准输出(至少不该是默认状态)。在工具程序 的世界里,没有消息就是好消息。 这个原则其实还有另外一个含义。一般来讲,UNIX工具程序一项遵循“你叫它做什么, 你就会得到什么”的设计哲学。
输出格式必须与可接受的输入格式一致 专业的工具程序认为遵循某种格式的输入数据,例如标题行之后接着数据行,或在 行上使用某种字符分割符等,所产生的输出也应遵循与输入一致的规则。这么做的 好处是,容易将一个程序的执行结果交给令一个程序处理。
让工具去做困难的部分 虽然UNIX程序并非完全符合你的要求,但是现有的工具或许已经可以为你完成 90%的工作。接下来,若有需要,你可以编写一个功能特定的小型程序来完成剩下 的工作。与每次都从头开始来解决各个问题相比,这已经让你省去许多工作了。
构建特定工具前,先想想 如前所述,若现存系统里就是没有需要的程序,可以花点时间构建满足所需的工 具。然而,动手编写一个能够解决问题的程序前,请先停下来想几分钟。你所要 做的是,是否有其他人也需要做?这个特殊的工作是否有可能是某个一般问题的 一个特例?如果是的话,请针对一般问题来编写程序。当然,这么做的时候,无 论是在程序的设计或编写上,都应该遵循前面所提到的几项原则。
相关阅读 更多 +